FAQ Allegro
FAQ AllegroConsultez toutes les FAQ
Nombre d'auteurs : 3, nombre de questions : 29, création le 10 mai 2013
Une fois le mode vidéo initialisé, nous pouvons créer et charger des images bitmap.
Il est possible de créer plusieurs types de bitmap avec Allegro, nous allons voir ces différents types et comment les utiliser.
Les trois types de bitmap définis par Allegro sont les suivants :
- Les bitmap « normaux » stockés en mémoire centrale : ces bitmap permettent des blits (collages) assez lents, mais la vitesse de blit est assurée quelle que soit la plateforme. Ce sont les bitmap les plus rapides à transformer (rotation, transparence, etc.) ;
- Les bitmap « système » stockés en mémoire centrale : ces bitmap sont un peu particuliers : bien que stockés dans la RAM, ils autorisent des blits plus rapides vers la carte vidéo que les bitmap simples. Ils sont aussi rapides à transformer que les bitmap normaux. Le seul bémol est que la vitesse de blit n'est pas assurée partout, il faut tester les flags GFX_HW_SYS_TO_VRAM_BLIT et GFX_HW_SYS_TO_VRAM_BLIT_MASKED pour être sûr que l'utilisation de bitmap système ne fasse pas baisser les performances du programme ;
- Les bitmap « vidéo » stockés en mémoire vidéo : la création de ces bitmap est limitée par la taille de la mémoire vidéo. Les blits de bitmap vidéo vers bitmap vidéo sont extrêmement rapide. La vitesse des blits vidéo dépend de la carte graphique ; si la carte ne supporte pas l'accélération des blits vidéo, les blits seront très lents. C'est pour cela qu'il faut tester les flags GFX_HW_VRAM_BLIT et GFX_HW_VRAM_BLIT_MASKED pour être sûr que l'utilisation de ce type de bitmap ne fera pas baisser les performances du programme. Enfin, toute transformation sur les bitmap vidéo est à proscrire, car l'accès aux bitmap de la carte vidéo est très lent
ATTENTION : lorsque l'on créer un bitmap en mémoire vidéo, le pointeur screen (créé par l'appel à set_gfx_mode et représentant « l'écran virtuel ») n'est plus utilisable.
Voici le détail des fonctions à utiliser pour créer chacun des trois types de bitmap. Elles prennent toutes en paramètre la taille (X, Y) du bitmap, et renvoient un pointeur sur un objet de type BITMAP (ou NULL si la fonction a échoué).
Création de bitmap « normal »
BITMAP *
create_bitmap
(
int
width, int
height);
Création de bitmap « système »
BITMAP *
create_system_bitmap
(
int
width, int
height);
Création de bitmap « vidéo »
BITMAP *
create_video_bitmap
(
int
width, int
height);
Les fonctions précédentes permettent de créer des bitmap vides, voyons à présent comment en charger à partir de fichiers.
Afin de charger un bitmap à partir d'un fichier image sur le disque dur, il faut utiliser la fonction load_bitmap. Les formats d'image supportés sont BMP, PCX, TGA et LBM.
BITMAP *
load_bitmap
(
const
char
*
filename, RGB *
palette);
Pour une image 16, 24 ou 32 bits, l'argument palette doit être NULL ; pour une image 8 bits (couleurs indexées), il faudra par contre passer une variable de type PALETTE (qui n'est rien d'autre qu'un tableau de RGB) pour récupérer la palette de couleurs de l'image.
À noter que tous les bitmap chargés sont des bitmap « normaux » ; pour les transférer vers la mémoire vidéo, il faudra créer soi-même un bitmap vidéo puis blitter le bitmap chargé sur le bitmap vidéo (sans oublier de supprimer le bitmap « normal », qui ne sera alors plus utile).
C'est très simple, pour désallouer un bitmap Allegro, on utilise la fonction :
void
destroy_bitmap(BITMAP *
bitmap);
Exemple :
/* Création (ou chargement) du bitmap
BITMAP *mon_bitmap = create_bitmap(100, 100);
/* ... */
/* Destruction du bitmap lorsque l'on n'en a plus besoin*/
destroy_bitmap(mon_bitmap);
La sauvegarde de bitmap peut être très utile pour par exemple faire une option de capture d'écran, faire un logiciel de dessin ou même enregistrer le résultat d'un tracé de courbe.
Allegro met à notre disposition une fonction très simple pour sauvegarder les bitmap sur le disque dur :
int
save_bitmap
(
const
char
*
filename, BITMAP *
bitmap, const
RGB *
palette);
Examinons les paramètres :
- filename est le chemin complet sur le disque du fichier du fichier à créer ;
- bitmap est le BITMAP à sauvegarder ;
- palette est la palette du bitmap, si ce dernier est un bitmap 256 couleurs (8 bits).
Les formats d'image supportés pour la sauvegarde sont BMP, TGA et PCX.
Voici un petit exemple complet pour illustrer tout ceci :
/* On suppose qu'Allegro est correctement initialisé */
/* On crée un bitmap vide de 200x200 pixels en mémoire */
BITMAP *
test =
create_bitmap
(
200
, 200
);
/* On repeint le bitmap en noir */
clear_to_color
(
test, 0
);
/* On affiche un petit rectangle blanc sur le bitmap */
rectfill
(
test, 0
, 0
, 50
, 50
, makecol
(
255
, 255
, 255
));
/* Enfin, on le sauvegarde dans le fichier "C:/Test.bmp" */
save_bitmap
(
"
c:/test.bmp
"
, test, NULL
);
/* On n'oublie pas de libérer le bitmap une fois que l'on n'en a plus besoin */
destroy_bitmap
(
test);