Bonjour,
je suis confronté a un probleme, j'utilisait jusqu'a maintenant le noir comme couleur de transparence, seulement j'ai decidé de changer pour le rose (255,0,255).
Mon code semblait bien marcher (le noir etait bien transparent)
mais plus maintenant. (mon rose apparait noir au lieu de transparent)
Je vous explique ce que fait mon code : je charge 4 fichiers bmp dans une surface.
avant tout il faut que je precise que si je charge un seul fichier ca marche :
mais si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 item_tile=load_image( "data/IT.bmp" ); // items return;
avec la fonction loadbloc qui s'occupe de copier mon fichier dans mon image :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 // item_tile=load_image( "data/IT.bmp" ); // items // return; tmp_tile=SDL_CreateRGBSurface(SDL_HWSURFACE, 274 , 1088, 32, 0, 0, 0, 0); SDL_SetColorKey( tmp_tile, SDL_RLEACCEL | SDL_SRCCOLORKEY, SDL_MapRGB( screen->format, 255, 0, 255) ); item_tile = SDL_DisplayFormat( tmp_tile ); // optimise //Si la surface a bien été optimisée if( item_tile != NULL ) { //Libération de l'ancienne image SDL_FreeSurface( tmp_tile ); } else { item_tile=tmp_tile; // si pas optimisé, pas grave on prend l'image comme ca... } loadbloc(item_tile,"IT.bmp",0); // basic blocs loadbloc(item_tile,"IT1.bmp",1); // ext blocs loadbloc(item_tile,"IT2.bmp",2); // les ennemies commencent a 128!
LA fonction load_image est la classique fonction (j'en ai essayé des plus ou moins optimisé mais ca ne change rien, de toute maniere elle n'est pas en cause car ca marche quand on charge sans copier), j'ai pas oublié de definir la couleur de transp dans cette fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 bool level::loadbloc(SDL_Surface* dest,std::string fichier,Uint8 pos) { SDL_Surface*tmp_tile= load_image( "data/"+fichier ); if (tmp_tile==NULL) return false; apply_surface(0,pos*272,tmp_tile,dest,NULL); SDL_FreeSurface(tmp_tile); return true; }
J'en arrive a ma question : pourquoi quand je copie (apply_surface) ca ne copie pas ma couleur de transparence ? => pire même... mon rose apparait NOIR a l'ecran !
note :
Merci de votre aide. montrez-moi comment copier une image...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL ) { SDL_Rect offset; offset.x = x; offset.y = y; //On blitte la surface SDL_BlitSurface( source, clip, destination, &offset ); }
Partager