2010-12-13 15 views
5

हाय वहाँ मेरे पास एक काले आयत के साथ एक छवि है, और इसकी पृष्ठभूमि पारदर्शी है। यह फ़ाइल एक पीएनजी (clear.png) के रूप में सहेजी गई है। तब मेरे पास एक और छवि है जो एक जेपीईजी (background.jpeg) के रूप में सहेजी गई एक ठोस लाल पृष्ठभूमि है। जो मैं करने की कोशिश कर रहा था वह इतना है कि clear.png में काली आयत ठोस लाल पृष्ठभूमि छवि के शीर्ष पर दिखाई दे।एक स्क्रीन पर एक पारदर्शी पीएनजी छवि को मारना

यह मैं क्या किया है है ..

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

से काम नहीं होता और यह सिर्फ मुझे स्क्रीन के तल पर एक लाल रंग की पृष्ठभूमि और एक काले रंग पाद लेख (इस isn 'के साथ एक स्क्रीन से पता चलता मेरे आयताकार :) :)। मैंने यहाँ क्या गलत किया है? छवियों का आकार भी समान है (640x480)।

उत्तर

7

स्क्रीन करने SDL_image init और दोनों बिटमैप Blit करना सुनिश्चित करें:

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

आपको बहुत बहुत धन्यवाद। – silent

संबंधित मुद्दे