在SDL中更改像素颜色

时间:2011-07-24 04:03:34

标签: colors sdl pixels

我制作的游戏只使用带有黑白像素的PNG。但有时我会想要将白色像素的颜色更改为不同的颜色,如绿色(#00FF00)。

我该怎么做呢?

编辑: 好的,我想出了一个解决方案

这是一个简单的功能:


    void setColor(SDL_Surface *surface, SDL_Color color) {
        Uint16 *pixels = (Uint16 *) surface->pixels;            // Get the pixels from the Surface

        // Iterrate through the pixels and chagne the color
        for (int i = 0; i w * surface->h); i++) {
            if (pixels[i] == SDL_MapRGB(surface->format, 0xFF, 0xFF, 0xFF))        // Search for white pixels
                pixels[i] = SDL_MapRGB(surface->format, color.r, color.b, color.g);
        }
    }

要记住的一点是,如果您使用的是32位表面,请将“Uint16”更改为“Uint32”,或者将8位表面更改为“Uint8”。

我不确定这段代码有多快,但它完成了工作。

1 个答案:

答案 0 :(得分:0)

这取决于你想要设置颜色的确切内容。

没有更多信息,立即想到的两个API是“SDL_SetColors()”和“SDL_SetPalette()”。

但真正的答案是“它取决于”。