SDL中如何改变像素的颜色

4
我正在制作一个游戏,它只使用黑色和白色像素的PNG图片。但有时我想把白色像素的颜色改变成其他颜色,比如绿色(#00FF00)。
那么我该如何做呢?
编辑: 好的,我想出了一个解决方案。
下面是一个简单的函数:
    void setColor(SDL_Surface *surface, SDL_Color color) {
        Uint16 *pixels = (Uint16 *) surface->pixels;            // 从表面获取像素
// 遍历像素并更改颜色 for (int i = 0; i w * surface->h); i++) { if (pixels[i] == SDL_MapRGB(surface->format, 0xFF, 0xFF, 0xFF)) // 搜索白色像素 pixels[i] = SDL_MapRGB(surface->format, color.r, color.b, color.g); } }
需要注意的是,如果使用32位表面,请将“Uint16”更改为“Uint32”,如果使用8位表面,则更改为“Uint8”。
我不确定这段代码的速度有多快,但它可以完成任务。

这就是它的实现方式,适用于所有位深度、alpha等。 - Valmond
1个回答

1

这取决于您要设置颜色的具体内容。

如果没有更多信息,我首先想到的两个API是“SDL_SetColors()”和“SDL_SetPalette()”。

但真正的答案是“这取决于情况”。


我尝试了SDL_SetColors()和SDL_SetPalette(),但两者都遇到了问题。不过,我找到了一种解决方法。 - Benjamin
SDL_SetPalette() 只用于 8 位调色板表面。如果您知道您只需要最多 256 种不同的颜色,并且希望能够快速切换它们,那么这可能是一个不错的选择。但是,在幕后,当在您的 64 位显示模式上显示 8 位调色板表面时,它很可能会执行与您的代码类似的操作。 - Null Set

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接