Fedora 10 で最新の SDL/GFX ライブラリを使用しており、PNG または GIF 画像を画面にレンダリングしようとしています。透明な PNG をまったく表示できなかったので、透明な部分またはスプライトをすべて白に置き換えました (そしてマゼンタ 255,0,255 を試しました)。次のコードを使用すると、白透明の PNG が正常に表示されます。
SDL_Surface *image = load_image("sprite-white.png");
SDL_Surface *roto = SDL_DisplayFormat(image);
SDL_SetColorKey(roto, SDL_SRCCOLORKEY, SDL_MapRGB( roto->format, 255,255,255 ));
SDL_BlitSurface( roto, NULL, surface, &offset );
しかし、スプライトを回転させようとすると、すべての白いピクセルがドロップされません。上記のコードを次のコードに置き換えて回転させます。
SDL_Surface *image = load_image("sprite-white.png");
SDL_Surface *roto = rotozoomSurface(image, rotation_degrees, 1, 1);
SDL_Surface *roto2 = SDL_DisplayFormat(roto);
SDL_SetColorKey(roto2, SDL_SRCCOLORKEY, SDL_MapRGB( roto2->format, 255,255,255 ));
SDL_BlitSurface( roto2, NULL, surface, &offset );
いくつかの良いピクセルの周りに白い輪郭ができてしまいます。GIF 画像でも同じ結果が得られます。
透明な PNG/GIF ファイルを試したとき、SDL_SetColorKey を呼び出さなかったことを除いて、コードは同じでした。次に、PNGがまったく正しく表示されませんでした。私が見つけた奇妙なことの 1 つは、透明な PNG が MS ペイントでも SDL と同じように見えたのに、GIMP/Photoshop プログラムでは正しく開いたということでした。
宛先サーフェスの設定に欠けているものはありますか?
Googleはあまり現れませんでした。実際の例は素晴らしいでしょう。