我制作的游戏只使用带有黑白像素的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”。
我不确定这段代码有多快,但它完成了工作。
答案 0 :(得分:0)
这取决于你想要设置颜色的确切内容。
没有更多信息,立即想到的两个API是“SDL_SetColors()”和“SDL_SetPalette()”。
但真正的答案是“它取决于”。