如何在SDL2中读取/写入SDL_Surface中的像素?

时间:2018-02-11 17:37:02

标签: sdl-2

如何读取和写入SDL2中SDL_Surface中包含的像素数据? (1)

我尝试在线搜索解决方案,但没有发现任何让我感到惊讶的事情。我记得它可以在SDL 1.2中完成,但我找不到任何与SDL 2相关的东西。*

*(除了操作纹理外,这不是我想做的。结果将是相同的,但我不想编辑驻留在GPU内存中的对象。)

我有一个SDL_Surface,我想操纵像素。我想这样做的原因是因为我想将所有黑色像素转换为白色像素。 (2)

然后我将表面加载到纹理对象中进行渲染。

我无法找到(2)的解决方案所以我尝试了手动方法(1)。

1 个答案:

答案 0 :(得分:2)

SDL_Surface结构有一个名为pixels的字段,它是一个数组,包含从左到右,从上到下的每个像素,使用一些像素格式(由字段format给出)

如果SDL_MUSTLOCK(surface)为false,您可以直接修改此像素数组。否则,您需要事先锁定曲面并使用SDL_LockSurface(和SDL_UnlockSurface)将其解锁。

可以在SDL_Surface page中找到更多信息。考虑到这一点,如果曲面已经针对RLE加速进行了优化,则pixels字段是只读的。否则,直接修改像素应该没问题。