SDL访问SDL_Surface的像素数据

时间:2018-11-27 16:43:37

标签: c++ sdl-2

我想控制已加载图像的颜色,但是在尝试备份像素数据时遇到了麻烦。我的代码如下所示:

Uint32* pixels, oriPixels;
SDL_Surface* image;

void BackupPixelData()
{
    pixels = (Uint32*)image->pixels;
    oriPixels = new Uint32[image->w * image->h];
    for (int i = 0; i < image->w * image->h; i++)
    {
        oriPixels[i] = pixels[i]; //This causes an access violation midway through
        *(oriPixels + i) = *(pixels + i); //Using this method does not cause any crash, but the image will have artifacts
    }
}

我可以通过将oriPixels更改为Uint32向量来使代码正常工作,而且我还没有遇到任何问题(可以使用oriPixels将图像恢复为原始颜色)。

如何正确加载像素数据?

图像为32位。

1 个答案:

答案 0 :(得分:1)

您必须考虑数据对齐。可以根据表面格式来填充行。 有关更多详细信息,请查看有关SDL_Surface的音高字段的文档https://wiki.libsdl.org/SDL_Surface

由于内存缓冲区的大小不是宽度*高度而是实际间距*高度,因此会出现访问冲突。