gpt4 book ai didi

c++ - SDL_SetColorKey 的问题

转载 作者:行者123 更新时间:2023-11-27 22:29:12 24 4
gpt4 key购买 nike

我正在尝试使用 SDL 创建透明 Sprite 。我在带有洋红色 (0xff00ff) 背景的位图上使用 SDL_SetColorKey(它是 100% 洋红色,我用 GIMP 检查过它:))对 SDL_SetColorKey 的调用如下所示:

SDL_SetColorKey( bitmap, SDL_SRCCOLORKEY, SDL_MapRGB(bitmap->format, 255, 0, 255) );

对 SDL_SetColorKey 的调用显然返回 0,但没有透明度。谁能告诉我我在这里缺少什么?

以下是有问题的代码,以防有人想测试它:

#include "SDL/SDL.h"

const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;
const char* WINDOW_TITLE = "SDL Start";

int main(int argc, char **argv)
{
SDL_Init( SDL_INIT_VIDEO );

SDL_Surface* screen = SDL_SetVideoMode( WINDOW_WIDTH, WINDOW_HEIGHT, 0,
SDL_HWSURFACE | SDL_DOUBLEBUF );
SDL_WM_SetCaption( WINDOW_TITLE, 0 );

SDL_Surface* bitmap = SDL_LoadBMP("resources/ship.bmp");
if(SDL_SetColorKey( bitmap, SDL_SRCCOLORKEY, SDL_MapRGB(bitmap->format, 255, 0, 255) )) printf("aaaaa %s", SDL_GetError());



// Part of the screen we want to draw the sprite to
SDL_Rect destination;
destination.x = 100;
destination.y = 100;
destination.w = 65;
destination.h = 44;

SDL_Event event;
bool gameRunning = true;

while (gameRunning)
{
if (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
{
gameRunning = false;
}
}

SDL_BlitSurface(bitmap, NULL, screen, &destination);

SDL_Flip(screen);
}

SDL_FreeSurface(bitmap);

SDL_Quit();

return 0;
}

更新:如果有人需要它,这里是位图:http://dl.dropbox.com/u/8936880/ship.bmp

最佳答案

问题出在你的图片上,我使用了我生成的图片,它可以直接使用你的代码。

您的图像是 32 位的,似乎 SDL_SetColorKey 不喜欢它,将其转换为 24 位,它应该可以工作。

从高级设置中保存为 BMP 时,可以使用 Gimp 进行转换。

试试this one转换为 24 位。

关于c++ - SDL_SetColorKey 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com