我正在移植使用8位索引颜色表面的a SDL 1.2 program(repository)到SDL2。
不幸的是,SDL_CreateRGBSurface()
默认为8 bpp曲面设置一个全白的256条目调色板,而不是SDL_SetVideoMode()
在SDL 1.2中设置的RGB884调色板。
如何设置与SDL 1.2 SDL_SetVideoMode(..., ..., 8, SDL_SWSURFACE)
来电中的默认调色板相匹配的调色板?
答案 0 :(得分:0)
SDL_SetPaletteColors()
以及从SDL 1.2 SDL_SetVideoMode()
输出派生的表格给出了我的代码段:
surface = SDL_CreateRGBSurface(0, 100, 100, 8, 0, 0, 0, 0);
Uint8 r[8] = { 0, 36, 73, 109, 146, 182, 219, 255 };
Uint8 g[8] = { 0, 36, 73, 109, 146, 182, 219, 255 };
Uint8 b[4] = { 0, 85, 170, 255 };
int curColor = 0;
for( unsigned int i = 0; i < 8; ++i )
for( unsigned int j = 0; j < 8; ++j )
for( unsigned int k = 0; k < 4; ++k )
{
SDL_Color color = { r[i], g[j], b[k], 255 };
SDL_SetPaletteColors( surface->format->palette, &color, curColor, 1 );
curColor++;
}