我将程序从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
制作调色板,然后将其设置为我的表面调色板?
答案 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);
大卫