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.2.15を使用していますので、私は大丈夫でしょうか? – tajmahal
SDLとSDL_imageは異なるライブラリです(少なくともLinuxでは)。最新のSDLは1.2.15、最新のSDL_imageは1.2.12です。私の答えのソースコードをマシン上で正常にコンパイルすることは可能ですか? –
あなたは正しいです。誤ってSDL_imageバージョンの代わりにSDLバージョンをチェックし、あなたのコードを試していないことは間違いありません。確かに、私のシステム上のSDL_imageバージョンは1.2.10でした。これで1.2.12にアップグレードしました。ありがとうございました! – tajmahal