/*******************************************************************
BITMAP : Sauver le dessin d'une BITMAP dans un fichier .bmp
         Le dessin se fait dans un sous-programme qui reçoit
         le pointeur de la BITMAP en paramètre
*******************************************************************/

#include <allegro.h>

// Dessiner sur un BITMAP reçu en paramètre (par adresse)
void dessiner(BITMAP *bmp){
     // Cercle blanc au centre
    circle(bmp,200,100,50,makecol(255,255,255));

    // Disques violets dans les coins
    circlefill(bmp,0,0,50,makecol(100,50,100));
    circlefill(bmp,399,0,50,makecol(100,50,100));
    circlefill(bmp,0,199,50,makecol(100,50,100));
    circlefill(bmp,399,199,50,makecol(100,50,100));

    // Lignes rouges et vertes en diagonales
    line(bmp,0,0,399,199,makecol(255,0,0));
    line(bmp,399,0,0,199,makecol(0,255,0));

    // Un peu de texte centré
    textprintf_centre_ex(bmp,font,200,0,makecol(255,255,255),-1,"BITMAP A SAUVER");
}


int main()
{
    // Déclaration d'un pointeur sur une structure BITMAP
    BITMAP *bmp;

    // Diverses variables...
    int fin,verif;

    // Lancer allegro et le mode graphique
    allegro_init();
    install_keyboard();

    set_color_depth(desktop_color_depth());
    if (set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0)!=0)
    {
        allegro_message("prb gfx mode");
        allegro_exit();
        exit(EXIT_FAILURE);
    }

    // Allocation dynamique d'une structure BITMAP de 400 par 200
    bmp=create_bitmap(400,200);

    // Effacer contenu éventuel qui traine en mémoire
    clear_bitmap(bmp);

    // DESSINER DANS LA BITMAP... en appelant un sous programme
    dessiner(bmp);

    // Affichage de la Bitmap sur l'écran au milieu
    blit(bmp, screen, 0,0, (SCREEN_W-bmp->w)/2, (SCREEN_H-bmp->h)/2, bmp->w, bmp->h);

    // Texte affiché à l'écran (screen) : ne sera pas sauvé
    textprintf_ex(screen,font,200,0,makecol(255,255,255),-1,
                            "VOULEZ VOUS SAUVER  ma_bitmap.bmp  Oui/Verifier/Non ?");

    // boucle d'événements
    fin=0;
    while (!fin)
    {
        // si OUI (touche O) sauver la BITMAP sans vérifier que c'est OK
        if (key[KEY_O])
        {
            save_bitmap("ma_bitmap.bmp",bmp,NULL);
            fin=1;
        }

        // si VERIFIER (touche V) sauver la BITMAP et vérifier que c'est OK
        if (key[KEY_V])
        {
            verif = save_bitmap("ma_bitmap.bmp",bmp,NULL);
            if (verif!=0)
                allegro_message("Votre image n'a pas pu etre sauvee");
            else
            {
                allegro_message("Votre image a bien ete sauvee");
                fin=1;
            }
        }

        // si NON (touche N) ou Echap alors sortir
        if (key[KEY_N] || key[KEY_ESC])
            fin=1;

    }

    // libérer la mémoire de la BITMAP quand on ne l'utilise plus (à la fin)
    destroy_bitmap(bmp);

    return 0;
}
END_OF_MAIN();