freeimage.h

FreeImage_ColorQuantizeEx

24 32

DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantizeEx(FIBITMAP *dib,
FREE_IMAGE_QUANTIZE quantize FI_DEFAULT(FIQ_WUQUANT), int PaletteSize FI_DEFAULT(256),
int ReserveSize FI_DEFAULT(0), RGBQUAD *ReservePalette FI_DEFAULT(NULL));

FreeImage_ColorQuantizeEx es una extensión de la función FreeImage_ColorQuantize que proporciona opciones adicionales usadas para cuantizar una imagen de 24-bit a cualquier número de colores (hasta 256), así como cuantizar una imagen de 24-bit usando una paleta proporcionada parcial o completa.

El parámetro PaletteSize es el tamaño de la paleta de salida deseada. ReserveSize es el tamaño de la paleta proporcionada, dada por el array de entrada ReservePalette.

// this code assumes there is a 24-bit bitmap loaded and
// present in a variable called 'dib'
RGBQUAD web_palette[216]; // list of the 216 "web-safe" colors (RGB increments of 51)
// ...
// Perform a color quantization using a user supplied palette
// The goal of FreeImage_ColorQuantizeEx will be to fill in
// the remaining 39 palette entries with the best choices based
// on the input image, then use the palette of size 255 to quantize the image.
// The output palette will contain a mix of the 216 and 39 colors,
// but not in any particular order. Palette entry 255 (the 256th entry)
// is unused in the image, and will be black in the palette.
// This allows the user to use the palette entry # 255 for transparency
// without worrying about making valid pixel data become transparent.
FIBITMAP *dib8_a = FreeImage_ColorQuantizeEx(dib, FIQ_NNQUANT, 255, 216, web_palette);
// Other uses of the function
// Only use 255 colors, so the 256th can be used for transparency
FIBITMAP *dib8_b = FreeImage_ColorQuantizeEx(dib, FIQ_NNQUANT, 255, 0, NULL);
// Generate no additional colors, only use the web-safe colors
FIBITMAP *dib8_c = FreeImage_ColorQuantizeEx(dib, FIQ_NNQUANT, 216, 216, web_palette);
// Quantize using a palette from a different dib
RGBQUAD another_palette[256];
// ...
FIBITMAP *dib8_d = FreeImage_ColorQuantizeEx(dib, FIQ_NNQUANT, 256, 256,
 another_palette);
// ...
FreeImage_Unload(dib8_a);
FreeImage_Unload(dib8_b);
FreeImage_Unload(dib8_c);
FreeImage_Unload(dib8_d);

Cuando se usa FreeImage_ColorQuantizeEx, el parámetro PaletteSize afecta en todos los cuantificadores, con cualquier valor entre 2-256, pero los parámetros ReserveSize/ReservePalette afectan sólo a los cuantificadores NN y LFP.