Versión: 0.47, de 10-Jul-2011


15. Formatos de ficheros de imágenes más habituales. Cómo leer imágenes desde ficheros.

Cuando se habla de imágenes creadas por ordenador, se suele distinguir entre dos grandes grupos :


También podríamos distinguir el caso de imágenes en 3 dimensiones, en las que además se indica (como mínimo) su situación en el espacio (la de cada elemento que la forma o la de uno que se toma como referencia, y también se pueden indicar los ángulos de rotación, las texturas que se le deben aplicar...). Es un caso bastante más complicado que lo que nos interesa por ahora, así que las trataremos más adelante.

En los juegos clásicos, se suelen usar imágenes Bitmap, y es enormemente frecuente que las imágenes no se creen "desde el programa", como hemos hecho hasta ahora, sino que se diseñan con un programa de manipulación de imágenes, se guardan en un cierto formato y desde nuestro programa nos limitamos a cargarlas y manipularlas.

Pues bien, los formatos de imagen Bitmap más habituales son:

Otros menos utilizados son, por ejemplo:


En nuestro caso, tendremos cuenta que:

15. Cómo leer imágenes desde ficheros. (*)

Vamos a empezar por centrarnos en el caso de Allegro. En la versión 4.0.2 podemos leer imágenes en formatos BMP, LBM, PCX y TGA usando

BITMAP *load_bmp(const char *nombreFich, RGB *paleta);
  (Para imágenes de 256 colores o color auténtico de 24 bits en formato BMP de Windows o de OS/2). 

BITMAP *load_lbm(const char *nombreFich, RGB *paleta);
  (Para imágenes de 256 colores en formato LBM).

BITMAP *load_pcx(const char *nombreFich, RGB *paleta);
  (Para imágenes de 256 colores o color auténtico de 24 bits en formato PCX).

BITMAP *load_tga(const char *nombreFich, RGB *paleta);
  (Para imágenes de 256 colores, color de alta densidad de 15 bits, color auténtico de 24 bits o color auténtico + transparencia de 32 bits en formato TGA).


y tenemos también una función genérica, que decide automáticamente qué tipo de fichero es, a partir de su extensión:

BITMAP *load_bitmap(const char *nombreFich, RGB *paleta);


Nosotros somos los responsables de comprobar que no ha habido ningún error (el puntero devolvería NULL), de destruir el BITMAP después de usarlo y de cambiar a un cierto modo gráfico antes de cargar la imagen o de indicar cómo se debe convertir los colores de la imagen a los de la pantalla con la orden "set_color_conversion( modo )", donde los modos son constantes con nombres:

COLORCONV_8_TO_24
COLORCONV_24_TO_8
COLORCONV_32_TO_24
COLORCONV_32A_TO_24
...

(en la documentación de Allegro están todos los valores posibles, aunque los nombres son igual de intuitivos que esos)

En el apartado 17 leeremos nuestras primeras imágenes.

Es menos habitual que un juego tenga que guardar imágenes (al menos a nuestro nivel actual), pero aun así, conviene comentar que también tenemos las funciones equivalentes (excepto para el LBM, que no podemos guardar):

int save_bmp(const char *nombreFich, BITMAP *bmp, const RGB *paleta);
int save_pcx(const char *nombreFich, BITMAP *bmp, const RGB *paleta);
int save_tga (const char *nombreFich, BITMAP *bmp, const RGB *paleta);

y la genérica

int save_bitmap(const char *nombreFich, BITMAP *bmp, const RGB *paleta);

En cualquier caso, devuelve un valor distinto de cero si hay algún error (no guardaremos imágenes todavía, pero sí las leeremos pronto... en el apartado 17).

(Información para Pascal y Java...Aun no disponible) (*)

Anterior Siguiente