如何在SDL 2中使用调色板。

7

我正在将一个程序从SDL 1升级到SDL 2,并需要使用颜色调色板。最初,我使用了SDL_SetColors(screen, color, 0, intColors);但在SDL 2中不起作用。我正在尝试使用:

SDL_Palette *palette = (SDL_Palette *)malloc(sizeof(color)*intColors);
SDL_SetPaletteColors(palette, color, 0, intColors);
SDL_SetSurfacePalette(surface, palette);

但是SDL_SetPaletteColors()返回-1并且失败,SDL_GetError没有给我任何信息。

我怎样才能从SDL_Color创建调色板,然后将其设置为我的表面的调色板?

2个回答

7

没有看到您的声明,很难确定您的变量是什么以及您打算如何使用它们。

这是我在SDL_gpu中设置灰度调色板的方法:

SDL_Color colors[256];
int i;

for(i = 0; i < 256; i++)
{
    colors[i].r = colors[i].g = colors[i].b = (Uint8)i;
}

#ifdef SDL_GPU_USE_SDL2
SDL_SetPaletteColors(result->format->palette, colors, 0, 256);
#else
SDL_SetPalette(result, SDL_LOGPAL, colors, 0, 256);
#endif
result SDL_Surface已经有一个调色板,因为它具有8位像素深度(请参见https://wiki.libsdl.org/SDL_Palette中的注释)。

2
最初的回答:
自从原帖发布以来,已经过了一段时间,但是还没有被接受的答案。在尝试将基于SDL 1.2的游戏迁移到使用2.0时,我遇到了同样的问题。以下是我所做的,希望能帮助其他面临类似问题的人:
将:
SDL_SetColors(screen, color, 0, intColors);

替换为:
SDL_ SDL_SetPaletteColors(screen->format->palette, color, 0, intColors);

David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接