2010-12-13 5 views
5

Salut, j'ai une image avec un rectangle noir dessiné dessus, et son arrière-plan est transparent. Ce fichier est enregistré en tant que png (clear.png). Ensuite, j'ai une autre image qui est juste un fond rouge solide enregistré en jpeg (background.jpeg). Ce que j'essayais de faire est de faire en sorte que le rectangle noir dans clear.png apparaisse au-dessus de l'image de fond rouge.Blanking d'une image .PNG transparente sur un écran

C'est ce que je l'ai fait ..

/*Transparent image*/ 
#include "SDL/SDL.h" 
#include "SDL/SDL_image.h" 
#include <iostream> 
using namespace std; 
int main(int argc,char *argv[]){ 
    SDL_Surface *screen = NULL; 
    SDL_Surface *background = NULL; 
    SDL_Surface *transparentimage = NULL; 

    if (SDL_Init(SDL_INIT_EVERYTHING) == -1){ 
     cout <<"could not start sdl" << endl; 
    } 

    screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE); 
    if (screen == NULL){ 
     cout<<"could not create the screen" << endl; 
    } 

    background = IMG_Load("background.jpeg"); 
    if (background == NULL){ 
     cout<<"could not load background" << endl; 
    } 

    transparentimage = IMG_Load("clear.png"); 
    if (transparentimage == NULL){ 
     cout<< "could not load transparentimage" << endl; 
    } 

    if (SDL_BlitSurface(background,NULL,screen,NULL) == -1){ 
     cout<<"Couldnt do background blitting " << endl; 
    } 
    if (SDL_BlitSurface(transparentimage,NULL,background,NULL) == -1){ 
     cout<<"could not do clear image blitting "<< endl; 
    } 

    SDL_Flip(screen); 
    SDL_Delay(5000); 

    SDL_FreeSurface(background); 
    SDL_FreeSurface(transparentimage); 

    SDL_Quit(); 

    return 0; 
} 

ci-dessus ne fonctionne pas et il me montre juste un écran avec un fond rouge et un pied de page noir au bas de l'écran (ce n » t mon rectangle :)). Qu'ai-je fait de mal ici? La taille des images est également identique (640x480).

Répondre

7

Assurez-vous init SDL_image et blit les deux bitmaps à l'écran:

/*Transparent image*/ 
#include "SDL/SDL.h" 
#include "SDL/SDL_image.h" 
#include <iostream> 
using namespace std; 
int main(int argc,char *argv[]){ 
    SDL_Surface *screen = NULL; 
    SDL_Surface *background = NULL; 
    SDL_Surface *transparentimage = NULL; 

    if (SDL_Init(SDL_INIT_EVERYTHING) == -1){ 
     cout <<"could not start sdl" << endl; 
    } 

    screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE); 
    if (screen == NULL){ 
     cout<<"could not create the screen" << endl; 
    } 

    int flags = IMG_INIT_JPG | IMG_INIT_PNG; 
    int initted=IMG_Init(flags); 
    if(initted & flags != flags) { 
     cout<<"could not init SDL_Image" << endl; 
     cout<<"Reason: " << IMG_GetError() << endl; 
    } 

    background = IMG_Load("red.jpg"); 
    if (background == NULL){ 
     cout<<"could not load background" << endl; 
    } 

    transparentimage = IMG_Load("green.png"); 
    if (transparentimage == NULL){ 
     cout<< "could not load transparentimage" << endl; 
    } 

    if (SDL_BlitSurface(background,NULL,screen,NULL) == -1){ 
     cout<<"Couldnt do background blitting " << endl; 
    } 
    if (SDL_BlitSurface(transparentimage,NULL,screen,NULL) == -1){ 
     cout<<"could not do clear image blitting "<< endl; 
    } 

    SDL_Flip(screen); 
    SDL_Delay(5000); 

    SDL_FreeSurface(background); 
    SDL_FreeSurface(transparentimage); 

    SDL_Quit(); 

    return 0; 
} 

screenshot

+0

Merci beaucoup. – silent

Questions connexes