将SDL 1.2的默认调色板与SDL_CreateRGBSurface()相匹配?

时间:2017-05-03 23:00:38

标签: c sdl sdl-2

我正在移植使用8位索引颜色表面的a SDL 1.2 programrepository)到SDL2。

不幸的是,SDL_CreateRGBSurface()默认为8 bpp曲面设置一个全白的256条目调色板,而不是SDL_SetVideoMode()在SDL 1.2中设置的RGB884调色板。

如何设置与SDL 1.2 SDL_SetVideoMode(..., ..., 8, SDL_SWSURFACE)来电中的默认调色板相匹配的调色板?

1 个答案:

答案 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++;
}