使用SDL更改像素颜色

时间:2014-03-09 20:59:00

标签: c++ sdl

我正在尝试使用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是仅由白色组成的图像: test.bmp

但输出,而不是所有蓝色,是多色条纹: output.bmp

有谁知道为什么我得到这个结果?我不能为我的生活弄明白。

0 个答案:

没有答案