FreeImage_Composite
8 32
DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg FI_DEFAULT(FALSE), RGBQUAD *appBkColor FI_DEFAULT(NULL), FIBITMAP *bg FI_DEFAULT(NULL));
Esta función compone una imagen de primer plano transparente contra un fondo de un único color o contra una imagen de fondo. A la entrada, fg define la imagen de primer plano y la máscara de transparencia (implícitamente incluida en la imagen de primer plano como una tabla de transparencia para dibs 8-bit o como un canal alfa para dibs de 32-bit.
La fórmula para calcular una muestra compuesta es:
output = α * foreground + (1-α) * background
donde α y los valores de las muestras de entrada y salida son expresadas como fracciones en el rango de 0 a 1. Para imágenes en color, los cálculos se realizan separadamente para las muestras R, G y B.
El pseudocódigo siguiente ilustra el uso interno del resto de los parámetros:
if(useFileBkg && FreeImage_HasBackgroundColor(fg)) {
// Use the file background as the single background color
} else {
// no file background color …
// use application background color ?
if(appBkColor) {
// use the application background as the single background color
}
// no application background color …
// use a background image ?
else if(bg) {
// use bg as the background image
// bg MUST BE a 24-bit image with the same width and height as fg
}
else {
// default case
// use a checkerboard as the background image
}
}
Referencias
Portable Network Graphics (PNG) Specification (Second Edition).
[Online] http://www.w3.org/TR/PNG/