我正在尝试使用SDL修改图像的像素颜色。最后,我希望能够检查r,g或b值是否超过某个限制然后使其饱和(将其设置为255)。对于测试,我只想将白色(255,255,255)的所有像素值更改为蓝色(0,0,255)。 我使用以下代码完成了此操作:
#include "SDL.h"
#include "SDL_image.h"
#include <iostream>
/*
* g++ sdltest.cpp -I/usr/include/SDL -lSDLmain -lSDL
*/
int main()
{
SDL_Surface* hello = NULL;
SDL_Color blue;
blue.r = 0;
blue.g = 0;
blue.b = 255;
SDL_Init(SDL_INIT_EVERYTHING);
hello = SDL_LoadBMP("test2.bmp");
Uint32 *pixels = (Uint32 *)hello->pixels;
int pixelNum = hello->w * hello->h;
for(int i = 0; i < pixelNum; i++)
{
uint8_t r;
uint8_t g;
uint8_t b;
uint32_t pixel = *((uint32_t *)hello->pixels + i);
SDL_GetRGB(pixel, hello->format, &r, &g, &b);
if(r == 255 && g == 255 && b == 255)
{
pixels[i] = SDL_MapRGB(hello->format, 0, 0, 255);
}
}
SDL_SaveBMP(hello, "output.bmp");
return 0;
}
其中test.bmp是仅由白色组成的图像:
但输出,而不是所有蓝色,是多色条纹:
有谁知道为什么我得到这个结果?我不能为我的生活弄明白。