freeimage.h

FreeImage_FillBackground

DLL_API BOOL DLL_CALLCONV FreeImage_FillBackground(FIBITMAP *dib, const void *color,
int options FI_DEFAULT(0));

Esta función pone rodos los pixels de una imagen al copor proporcionado en el parámetro color.

Parámetros

  • dib La imagen a llenar.
  • color Un puntero al valor de color a usar para llenar la imagen. Siempre se asume que la memoria apuntada por este puntero tiene al menos el tamaño del valor de color, pero nunca más pequeño que el tamaño de una estructura RGBQUAD.
  • options Opciones que afectan al proceso de búsqueda de color para imágenes con paleta.

La función retorna TRUE si tiene éxito, FALSE en caso contrario. Esta función falla si dib o color son NULL.

El puntero color debe apuntar a una posición de memoria con al menos 4-bytes para tipos FIT_BITMAPs, y al menos el tamaño de un valor de color de la imagen, si ese tamaño es mayor de 4 bytes.

Tipo de imagen FIT_BITMAP

El parámetro color SE DEBE especificar a través de una estructura RGBQUAD para todas las imágenes de tipo FIT_BITMAP (incluyendo imágenes con paleta), el tamaño de esa memoria es por lo tanto el tamaño de una estructura RGBQUAD, que es de 4 bytes.

Imágenes 24- y 32-bit

Para imágenes de 24- y 32-bit, los miembros red, green y blue de la estructura RGBQUAD se usan directamente para los canales rojo, verde y azul de la imagen. Aunque se admiten colores RGBQUAD con transparencia alfa, el canal alfa de una imagen de 32-bit nunca es modificado por esta función. Un color de relleno con un valor de alfa menor de 255 es mezclado con el color de fondo actual de la imagen, el cual es determinado a partir del pixel inferior izquierdo de la imagen. Por lo tanto, usando colores con el canal alfa activo, se asume que la imagen es unicolor antes de la operación de llenado. Sin embargo, el miembro rgbReserved de RGBQUAD sólo se tiene en cuenta si se ha especificado la opción FI_COLOR_IS_RGBA_COLOR.

ParámetroDescripción
FI_COLOR_IS_RGBA_COLOREl color RGBQUAD es un color RGBA (contiene un canal alfa válido)

Tabla 17: Opciones de llenado de fondo para imágenes 24- or 32-bit

16-bit RGB images

Para imágenes de 16-bit RGB, las componente roja, verde y azul del color especificado se trasladan de forma transparente the red-, green- and blue components of the specified color are transparently translated a la representación de 16-bit 555 o 565. Esto dependerá de las máscaras rojo, verde y azul actuales de la imagen.

Imágenes con paleta de 1-, 4- o 8-bit

Se debe prestar atención especial a las imágenes con paleta. Generalmente, el color RGB especificado es buscado en la paleta de la imagen. El índice encontrado en la paleta es entonces usado para rellenar la imagen. Hay algunas banderas de opciones que afectan al proceso de búsqueda.

ParámetroDescripción
FI_COLOR_IS_RGB_COLOR Usa el color más cercano al color especificado. Este es el comportamiento por defecto y siempre encontrará un color dentro de la paleta. Sin embargo, el resultado visual puede quedar bastante lejos del esperado y depende principalmente de la paleta de la imagen.
FI_COLOR_FIND_EQUAL_COLOR Busca en la paleta de la imagen el color especificado pero sólo se usará el índice de la paleta devuelto si el color especificado coincide exactamente con la entrada en la paleta. Por supuesto, dependiendo de la paleta de la imagen, esta operación puede fallar. En ese caso, la función recurre a la opcion FI_COLOR_ALPHA_IS_INDEX y usa el miembro rgbReserved del RGBQUAD (o su nibble de menor peso para imágenes de 4-bit o su bit menos significativo para imágenes de 1-bit) como índice de la paleta para la operación de llenado.
FI_COLOR_ALPHA_IS_INDEX El miembro rgbReserved del color (alpha) contiene el índice de la paleta a usar.
FI_COLOR_PALETTE_SEARCH_MASK Combinación de (FI_COLOR_FIND_EQUAL_COLOR | FI_COLOR_ALPHA_IS_INDEX) no se realiza búsqueda.

Tabla 18: Opciones de relleno de fondo para imágenes con paleta.

Cualquier otro tipo de imágenes

El parámetro color DEBE apuntar a un double, si la imagen a rellenar es de tipo FIT_DOUBLE, apuntar a una estructura RGB[A]16 si la imagen es de tipo RGB[A]16, a una estructura RGB[A]F si la imagen es de tipo FIT_RGB[A]F, etc.