Introducción

Logo FreeImage

FreeImage es una librería que proporciona soporte para trabajar con ficheros de imágenes.

Permite, entre otras cosas, cargar y guardar imágenes en varios formatos diferentes: BMP, GIF, JPG, etc. También permite hacer conversiones de color, manipulación de imágenes, acceso a metadatos, etc.

La página oficial es https://freeimage.sourceforge.io, desde la que se pueden descargar las librerías, el código fuente y los ficheros necesarios para usar desde nuestros programas C/C++. También incluye la documentación, aunque en inglés.

En este curso se incluye una traducción de parte de esa documentación.

Descarga e instalación

Hay disponibles para descarga dos distribuciones:

  • Source distribution: incluye el código fuente de FreeImage, y envoltorios para C++, C#, Delphi y VB6, además de ejemplos y las librerías usadas internamente.
  • FreeImage DLL: distribucón binaria, incluyendo DLL, librería de enlazado estático LIB, fichero de cabecera, los envoltorios para C++, C#, Delphi y VB6 y ejemplos.

Nosotros trabajaremos con la segunda distribución, y usaremos FreeImage en nuestros programas a través de la DLL.

En el momento en que se escribe este curso la versión de FreeImage más reciente es la 3.18.0.

También está disponible para descarga el fichero PDF con la documentación.

DLL y lib

Como viene siendo tradición, el fichero de librería estática para enlazar con la DLL se suministra en el formato de Microsoft, es decir, es un fichero LIB.

Por otra parte, los IDEs que usamos suelen usar MinGW como compilador, y esto implica que nuestra librería estática debe ser un fichero .a, en lugar de un .lib. Ya hemos convertido estos ficheros anteriormente, por ejemplo para usar MySQL o SQLite. El proceso es similar en éste caso.

Sin embargo, hay buenas noticias: las últimas versiones de MinGW pueden usar ficheros .lib, de modo que ya no es necesario hacer esa conversión.

La distribución que descarguemos contiene una carpeta 'dist' que a su vez contiene otras dos carpetas, 'x32' y 'x64', la primera con los ficheros necesarios para crear aplicaciones de 32 bits, y la segunda para crear aplicaciones de 64 bits.

En cada una de ellas hay tres ficheros: FreeImage.dll, FreeImage.h y FreeImage.lib.

A modo de ejemplo, la versión de Mingw-w64 que se incluye con Code::Blocks 20.03 es la 8.1. En este caso, la carpeta en la que hay que trabajar es <:ruta>\CodeBlocks\MinGW\x86_64-w64-mingw32

Elegiremos la versión que se ajuste a nuestro caso, 32 ó 64 bits y actuaremos, pués, como en el caso de otras librerías que hemos usado con anterioridad:

  • Copiaremos el fichero FreeImage.lib en la carpeta lib de nuestro compilador.
  • Copiaremos el fichero Freeimage.h en la carpeta include de nuestro compilador.
  • Copiaremos el fichero FreeImage.dll a la carpeta donde esté nuestro proyecto o a alguna que esté incluída en el PATH de nuestro equipo.

Y ya podemos empezar a usar ésta librería en nuestros programas.

Iniciar librería

Cuando se usa FreeImage como una DLL es necesario inicializar la librería, y liberar los recursos una vez hemos terminado de trabajar con ella. Estas dos tareas se realizan mediante las funciones FreeImage_Initialise y FreeImage_DeInitialise.

Pero no tenemos que preocuparnos por este tema en particular, ya que estas dos funciones son llamadas automáticamente. Sólo en el caso de usar la versión estática de FreeImage será necesario llamar a estas funciones explícitamente.

Esto es cierto en Windows, en otros sistemas, como Linux o MacOSX, será necesario invocarlas siempre.

Otras funciones auxiliares

Disponemos de algunas otras funciones que pueden resultar de utilidad. Por ejemplo FreeImage_GetVersion nos devuelve una cadena con la versión de la librería que estamos usando.

La función FreeImage_GetCopyrightMessage devuelve una cadena con un mensaje de copyright estándar.