
/*****************************************************************************
BITMAP : Charger une image depuis un fichier .bmp vers une BITMAP puis
effectuer un traitement pixel par pixel (négatif) vers autre BITMAP
Afficher l'original et le résultat
*****************************************************************************/
#include <allegro.h>
int main()
{
// Déclaration du pointeur sur BITMAP devant recevoir l'image
BITMAP *image;
// Pointeur sur BITMAP devant recevoir le résultat du traitement
BITMAP *imgneg;
int x,y;
int cim,r,g,b;
// 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);
}
// Chargement de l'image (l'allocation a lieu en même temps)
image=load_bitmap("mon_image.bmp",NULL);
if (!image) {
allegro_message("pas pu trouver/charger mon_image.bmp");
allegro_exit(); exit(EXIT_FAILURE);
}
// Affichage de l'image originale sur l'écran en haut à gauche
blit(image,screen,0,0,0,0, image->w, image->h);
// IMAGE EN NEGATIF
// Créer
imgneg=create_bitmap(image->w,image->h);
// Remplir
for (y=0;y<image->h;y++)
for (x=0;x<image->w;x++)
{
// Récupérer la couleur de l'image en x,y
cim=getpixel(image,x,y);
// Décomposer les 3 composantes rouge vert bleu
r=getr(cim);
g=getg(cim);
b=getb(cim);
// Inverser linéairement 0 -> 255 et 255 -> 0
r=255-r;
g=255-g;
b=255-b;
// Mettre cette nouvelle couleur dans la BITMAP destination
putpixel(imgneg,x,y,makecol(r,g,b));
}
// Afficher
blit(imgneg,screen,0,0,image->w,0,image->w,image->h);
// Boucle interactive (vide sur cet exemple, juste pour attendre...)
while (!key[KEY_ESC])
{
}
return 0;
}
END_OF_MAIN();