2010-12-13 31 views
5

こんにちは、そこに描かれた黒い矩形の画像があり、その背景は透明です。このファイルはpng(clear.png)として保存されます。それから私はjpeg(background.jpeg)として保存されたただの赤い背景である別のイメージを持っています。私がしようとしていたのは、clear.pngの黒い矩形が赤い背景画像の上に現れるようにすることです。透明な.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を初期化し、画面に両方のビットマップをブリットすることを確認してください:

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

関連する問題