如何在SDL 2中使用调色板

时间:2015-04-13 15:43:35

标签: c sdl-2 palette color-palette

我将程序从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 个答案:

答案 0 :(得分:6)

很难说出你的变量是什么以及你打算如何使用它们而不看你的声明。

以下是我在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中的注释)。

答案 1 :(得分:0)

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

使用:
    SDL_ SDL_SetPaletteColors(screen->format->palette, color, 0, intColors);

大卫