【问题标题】:How to use palettes in SDL 2如何在 SDL 2 中使用调色板
【发布时间】:2015-06-19 00:18:02
【问题描述】:

我正在将程序从 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 制作调色板,然后将其设置为我的表面的调色板?

【问题讨论】:

    标签: c sdl-2 palette color-palette


    【解决方案1】:

    如果不看你的声明,很难知道你的变量是什么以及你打算如何使用它们。

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

    【讨论】:

      【解决方案2】:

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

      与:
      SDL_ SDL_SetPaletteColors(screen-&gt;format-&gt;palette, color, 0, intColors);

      大卫

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-05
        • 2018-08-25
        • 1970-01-01
        • 2020-10-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多