如何读取和写入SDL2中SDL_Surface中包含的像素数据? (1)
我尝试在线搜索解决方案,但没有发现任何让我感到惊讶的事情。我记得它可以在SDL 1.2中完成,但我找不到任何与SDL 2相关的东西。*
*(除了操作纹理外,这不是我想做的。结果将是相同的,但我不想编辑驻留在GPU内存中的对象。)
我有一个SDL_Surface,我想操纵像素。我想这样做的原因是因为我想将所有黑色像素转换为白色像素。 (2)
然后我将表面加载到纹理对象中进行渲染。我无法找到(2)的解决方案所以我尝试了手动方法(1)。
答案 0 :(得分:2)
SDL_Surface
结构有一个名为pixels
的字段,它是一个数组,包含从左到右,从上到下的每个像素,使用一些像素格式(由字段format
给出)
如果SDL_MUSTLOCK(surface)
为false,您可以直接修改此像素数组。否则,您需要事先锁定曲面并使用SDL_LockSurface
(和SDL_UnlockSurface
)将其解锁。
可以在SDL_Surface
page中找到更多信息。考虑到这一点,如果曲面已经针对RLE加速进行了优化,则pixels
字段是只读的。否则,直接修改像素应该没问题。