作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在将程序从 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
制作调色板,然后将其设置为表面的调色板?
最佳答案
如果不查看您的声明,很难说出您的变量是什么以及您打算如何使用它们。
下面是我在 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
结果
SDL_Surface 已经有一个调色板,因为它有一个 8 位像素深度(参见 https://wiki.libsdl.org/SDL_Palette 中的注释)。
关于c - 如何在 SDL 2 中使用调色板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29609544/
我是一名优秀的程序员,十分优秀!