Capítulo 2 Funciones de información

FreeImage dispone de varias funciones que nos permiten obtener información sobre un mapa de bits. Veremos las más útiles.

Funciones para obtener dimensiones

La función FreeImage_GetWidth obtiene la anchura de un mapa de bits en pixels, y la función FreeImage_GetHeight obtiene la altura de un mapa de bits en pixels.

Por otra parte, la función FreeImage_GetLine obtiene la anchura de un mapa de bits en bytes, y la función FreeImage_GetPitch obtiene la anchura de un mapa de bits en bytes.

Funciones para resolución

Para obtener la resolución horizontal en pixels por metro se puede usar la función FreeImage_GetDotsPerMeterX y para la resolución vertical, la función FreeImage_GetDotsPerMeterY.

Para asignar la resolución horizontal, también en pixels por metro se usa la función FreeImage_SetDotsPerMeterX. La vertical se asigna con la función FreeImage_SetDotsPerMeterY.

Funciones de colores

En mapas de bits con paleta, se puede obtener el número de colores usados mediante la función FreeImage_GetColorsUsed. Para mapas de bits sin paleta esta función siempre retorna cero.

La función FreeImage_GetPalette nos devuelve un puntero a la paleta del mapa de bits.

Para obtener el tipo de color de un mapa de bits disponemos de la función FreeImage_GetColorType.

Los posibles valores de tipo de color se pueden consultar en la tabla 5.

Para mapas de bits con paleta podemos usar la función FreeImage_GetColorsUsed para obtener el número de colores, si se trata de un mapa de bits high-color el valor retornado es cero.

En mapas de bits que no usan paleta, para cada pixel, los componentes de color se codifican en distintos bits, dependiendo del número de colores se usan diferentes cantidades de bits para cada componente. Para saber cuántos bits se usan para codificar cada pixel disponemos de la función FreeImage_GetBPP. Y podemos obtener las máscaras de color para cada componente: rojo, verde y azul, mediante las funciones FreeImage_GetRedMask, FreeImage_GetGreenMask y FreeImage_GetBlueMask, respectivamente.

Algunos tipos de mapas de bits tienen asignado un color de fondo. Podemos averiguar si un mapa de bits tiene un color de fondo usando la función FreeImage_HasBackgroundColor, que retornará TRUE si el mapa de bits tiene un color de fondo.

Si el mapa de bits tiene un color de fondo, podemos recuperarlo usando la función FreeImage_GetBackgroundColor. Para asignar un color de fondo usaremos la función FreeImage_SetBackgroundColor.

Funciones de transparencia

Algunos formatos de imagen permiten transparencia, esto es, ciertos colores cuando se asignan a pixels hacen que se visualicen los colores que previamente contenían esos pixels. Esto se traduce en que la imagen tenga una forma aparentemente no rectangular.

La transparencia puede ser total, pero también puede ser parcial, si se usa el canal alfa. Los colores de una imagen se codifican mediante tres componentes de los colores básicos en la síntesis aditiva: rojo, verde y azul. Normalmente se denomina a esos componentes 'canales'. Es posible añadir un cuarto canal, el canal alfa, que indica el nivel de transparencia. Un nivel bajo indica que el color es más opaco. Un nivel alto indica que el color es más transparente. Cuanto más transparente sea un color, más visible será el valor previo del pixel.

FreeImage dispone de varias funciones para obtener información sobre la transparencia de una imagen:

La función FreeImage_IsTransparentdevuelve TRUE si la tabla de transparencia esté habilitada.

FreeImage_SetTransparent indica a FreeImage si puede hacer uso de la tabla de transparencia o del canal alfa.

FreeImage_GetTransparencyCount devuelve el número de colores transparentes en una paleta de mapa de bits.

Podemos recuperar la tabla de transparencias mediante la función FreeImage_GetTransparencyTable, que nos devuelve un puntero a esa tabla, y podemos asignar una tabla de transparencias con FreeImage_SetTransparencyTable.

En imágenes con paleta se puede obtener la entrada de la paleta que se usa como color transparente con FreeImage_GetTransparentIndex, y se puede asignar el índice de esa entrada en la paleta con FreeImage_SetTransparentIndex.

Funciones de uso de memoria

Para saber cuantos bits se usan para codificar cada pixel de una imagen se usa la función FreeImage_GetBPP.

Para recuperar el tamaño del elemento DIB de un FBITMAP usaremos la función FreeImage_GetDIBSize

Finalmente FreeImage_GetMemorySize calcula, o da una estimación de la cantidad total de memoria usada por un mapa de bits FreeImage.

Funciones de información general

Existen varios tipos me mapas de bits, como se muestra en la tabla 2. Podemos averiguar el tipo de un mapa de bits mediante la función FreeImage_GetImageType.

Para recuperar el BITMAPINFOHEADER del elemento DIB de un FBITMAP disponemos de la función FreeImage_GetInfoHeader que nos devuelve un puntero a esa estructura.

Para recuperar el puntero a la estructura BITMAPINFO del elemento DIB de un FBITMAP se puede usar la función FreeImage_GetInfo. En realidad, el primer miembro de esta estructura es una estructura BITMAPINFOHEADER, de modo que estas dos últimas funciones son equivalentes. De hecho, esta segunda es un alisas de la anterior.

Es posible que el mapa de bits no contenga la información sobre los pixels, podemos usar la función FreeImage_HasPixels, que devuelve FALSE si el mapa de bits carece de datos de pixels.

Funciones de miniatura de imagen

Los mapas de bits pueden contener una imagen en miniatura de la imagen total, lo que se conoce como 'thumbnail'. Se puede recuperar un puntero a él mediante la función FreeImage_GetThumbnail. Para asignar un thumbnail se usa la función FreeImage_SetThumbnail

Ejemplo 2

Este ejemplo visualiza información sobre un fichero de imagen. Es un programa para línea de comandos en el que se debe especificar como parámetro un fichero de imagen válido.

Nombre Fichero Fecha Tamaño Contador Descarga
Ejemplo 2 FreeImage FreeImage002.zip 2021-05-05 1830 bytes 210