freeimage.h

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/