2010-12-13 11 views
5

Hallo, ich habe ein Bild mit einem schwarzen Rechteck darauf gezeichnet, und der Hintergrund ist transparent. Diese Datei wird als PNG (clear.png) gespeichert. Dann habe ich ein anderes Bild, das nur ein fester roter Hintergrund ist, der als jpeg (background.jpeg) gespeichert wird. Was ich versuchte, war, dass das schwarze Rechteck in clear.png oben auf dem roten Hintergrundbild erschien.Ein transparentes PNG-Bild auf einen Bildschirm prellen

Dies ist, was ich getan habe ..

/*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; 
} 

Die oben funktioniert nicht und es zeigt mir nur einen Bildschirm mit einem roten Hintergrund und einem schwarzen Fußzeile am unteren Rand des Bildschirms (diese isn‘ t mein Rechteck :)). Was habe ich hier falsch gemacht? Auch die Größe der Bilder ist identisch (640x480).

Antwort

7

Stellen Sie sicher, SDL_image und blitten beide Bitmaps auf dem Bildschirm init:

/*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

Ihnen sehr danken. – silent

Verwandte Themen