Ce programme explique comment, si elle n'est pas utilisée pour réaliser des effets de transparence, il est possible d'utiliser la composante alpha d'une image pour réaliser des zones de selection.
Attention, si vous ouvrez les images utilisées par cette démonstration avec un éditeur d'image, vous obtiendrez une image vide. En effet, nous avons détourné la composante alpha pour un autre usage. Dans notre cas elle varie entre 0 et 4. L'image disparait donc par rapport au fond. Si vous voulez voir l'image dans votre éditeur d'image, vous devez supprimer la composante alpha.
Dans la pratique, vous n'êtes pas obligé d'utiliser la composante alpha pour réaliser une zone de selection. Vous pouvez utiliser plmusieurs images, une pour l'affichage et une pour définir les zones de selection. Ainsi, vous conservez la composante alpha pour réaliser des effets de transparence évolués.
#define DEBUG(x) fprintf( stderr, "DEBUG : %s - line : %d- file : %s \n", x, __LINE__, __FILE__ );
int main( int argc, char *argv[] ){
int width=640,height=480;
int red;
int x,y;
int w, h;
int id_country;
MLV_Image *map, *map_display, *country_layer;
#define NB_COUNTRY 5
int nb_country = NB_COUNTRY;
const char* id_to_country[ NB_COUNTRY+1 ][ 2 ] = {
{ "", "" },
{ "Espagne", "spain.png" },
{ "France", "france.png" },
{ "Grèce", "greece.png" },
{ "Italie", "italy.png" },
{ "Portugal", "portugal.png" }
};
"advanced - 8 - zone click", "zone click", width, height
);
0, 0, width, height,
MLV_rgba(0,0,0,MLV_ALPHA_OPAQUE), map
);
for( id_country=1; id_country < nb_country+1; id_country++ ){
const char* file_name = id_to_country[id_country][1];
if( ! country_layer ){
fprintf( stderr, "Impossible de lire le fichier %s", file_name );
exit(0);
}
for( w = 0; w < width; w++ ){
for( h = 0; h < height; h++ ){
country_layer, w, h, &red, NULL, NULL, NULL
);
if( red != 0 ){
id_country, id_country, id_country,
MLV_ALPHA_OPAQUE
), map
);
}
}
}
}
while( event_type!=
MLV_KEY || touche != MLV_KEYBOARD_ESCAPE ){
if( 1 <= id_country && id_country <= nb_country ){
);
}
}
}
return 0;
}