2012-03-01 15 views
0

カラーキーイングを使用してSDLで透明度を達成しようとしています。 BMPファイルでは動作しますが、PNGファイルでは動作しません。私は、コードと画像の両方をアップロードしたSDL_imageとPNGファイルでカラーキー透明度が機能しない

#include <SDL/SDL.h> 
#include <SDL/SDL_image.h> 

int main(int argc, char *argv[]) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 
    SDL_Surface *displaySurface = SDL_SetVideoMode(200, 100, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); 

    SDL_Surface *tmpSurface = NULL; 
    SDL_Surface *backgroundSurface = NULL; 
    SDL_Surface *bmpSurface = NULL; 
    SDL_Surface *pngSurface = NULL; 

    tmpSurface = IMG_Load("background.png"); 
    backgroundSurface = SDL_DisplayFormat(tmpSurface); 
    SDL_FreeSurface(tmpSurface); 

    tmpSurface = SDL_LoadBMP("bmpImage.bmp"); 
    bmpSurface = SDL_DisplayFormat(tmpSurface); 
    SDL_FreeSurface(tmpSurface); 
    SDL_SetColorKey(bmpSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(bmpSurface->format, 255, 0, 255)); 

    tmpSurface = IMG_Load("pngImage.png"); 
    pngSurface = SDL_DisplayFormat(tmpSurface); 
    SDL_FreeSurface(tmpSurface); 
    SDL_SetColorKey(pngSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(pngSurface->format, 255, 0, 255)); 

    SDL_Rect dest; 

    dest.x = 0; 
    dest.y = 0; 

    SDL_BlitSurface(backgroundSurface, NULL, displaySurface, &dest); 

    SDL_BlitSurface(bmpSurface, NULL, displaySurface, &dest); 

    dest.x = 50; 
    SDL_BlitSurface(pngSurface, NULL, displaySurface, &dest); 

    SDL_Flip(displaySurface); 

    SDL_Event event; 

    while (1) { 
     while (SDL_PollEvent(&event)) { 
      ; 
     } 

     SDL_Delay(1); 
    } 

    return 0; 
} 

私はここに使用しています:

http://tobias.braun-abstatt.de/files/forums/transparency_test.zip

答えて

1

あなたはSDL_imageバージョン1.2.10または1.2を使用している場合、ここで

は私のコードです.11、バージョン1.2.12に更新してください。

#include <SDL/SDL_image.h> 

#if (SDL_IMAGE_MAJOR_VERSION != 1) || (SDL_IMAGE_MINOR_VERSION != 2) || (SDL_IMAGE_PATCHLEVEL < 12) 
#error "Invalid SDL_image version" 
#endif 
+0

私はバージョン1.2.15を使用していますので、私は大丈夫でしょうか? – tajmahal

+1

SDLとSDL_imageは異なるライブラリです(少なくともLinuxでは)。最新のSDLは1.2.15、最新のSDL_imageは1.2.12です。私の答えのソースコードをマシン上で正常にコンパイルすることは可能ですか? –

+0

あなたは正しいです。誤ってSDL_imageバージョンの代わりにSDLバージョンをチェックし、あなたのコードを試していないことは間違いありません。確かに、私のシステム上のSDL_imageバージョンは1.2.10でした。これで1.2.12にアップグレードしました。ありがとうございました! – tajmahal

関連する問題