IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ Allegro

FAQ AllegroConsultez toutes les FAQ

Nombre d'auteurs : 3, nombre de questions : 29, création le 10 mai 2013 

 
OuvrirSommaire2DBitmap

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 :

  1. 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.) ;
  2. 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 ;
  3. 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 »

 
Sélectionnez
BITMAP *create_bitmap(int width, int height);

Création de bitmap « système »

 
Sélectionnez
BITMAP *create_system_bitmap(int width, int height);

Création de bitmap « vidéo »

 
Sélectionnez
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.

 
Sélectionnez
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).

Créé le 14 septembre 2008  par xboxut

C'est très simple, pour désallouer un bitmap Allegro, on utilise la fonction :

 
Sélectionnez
void destroy_bitmap(BITMAP *bitmap);

Exemple :

 
Sélectionnez
/* 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);
Créé le 14 septembre 2008  par xboxut

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 :

 
Sélectionnez
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 :

 
Sélectionnez
/* 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);
Créé le 14 septembre 2008  par xboxut

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008-2012 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.