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.