Colors 在SDL中更改像素颜色

Colors 在SDL中更改像素颜色,colors,sdl,pixels,Colors,Sdl,Pixels,我正在制作一个只使用黑白像素的PNG的游戏。但有时我想把白色像素的颜色改成不同的颜色,比如绿色(#00FF00) 我该怎么做呢 编辑: 好吧,我想出了一个解决办法 下面是一个简单的函数: void setColor(SDL_Surface *surface, SDL_Color color) { Uint16 *pixels = (Uint16 *) surface->pixels; // Get the pixels from the Surface

我正在制作一个只使用黑白像素的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); } } void setColor(SDL_曲面*曲面,SDL_颜色){ Uint16*像素=(Uint16*)曲面->像素;//从曲面获取像素 //通过像素排列并改变颜色 对于(int i=0;i w*曲面->h);i++){ 如果(像素[i]==SDL_MapRGB(表面->格式,0xFF,0xFF,0xFF))//搜索白色像素 像素[i]=SDL_MapRGB(表面->格式,color.r,color.b,color.g); } } 请记住,如果使用32位曲面,请将“Uint16”更改为“Uint32”,或将“Uint8”更改为8位曲面


我不确定这段代码的速度有多快,但它完成了任务。

这完全取决于您试图设置的颜色

在没有更多信息的情况下,我们会立即想到两个API:“SDL_SetColors()”和“SDL_setpalete()”

但真正的答案是“视情况而定”。

我试过SDL_setColor()和SDL_SetPalette(),但两者都有问题。我确实想出了一个方法。
SDL\u SetPalette()
仅用于8位托盘表面。如果您知道您最多只能使用256种不同的颜色,并且希望能够快速切换它们,那么这可能是一个不错的选择。但是,在64位显示模式下显示8位托盘表面时,它可能会在幕后执行类似于代码的操作。它是如何完成的,适用于所有位深度、alpha等。