我在 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根本没有正确显示。我发现的一件奇怪的事情是透明 PNG 在 MS Paint 中看起来与在 SDL 中相同,但 GIMP/Photoshop 程序正确打开了它。
我在设置目标表面时缺少什么吗?
谷歌没有出现太多,一个可行的例子会很棒。