【发布时间】:2017-07-07 14:37:58
【问题描述】:
我想加载一个 png 图像,并获取其中一些像素的颜色(32 位 RGBA 格式)。我已经搜索了很多,但还没有找到一个很好的解决方案。
我发现,使用SDL_LockTexture 进行像素操作。但不想改变图像,只是读取它的一些像素。
【问题讨论】:
-
SDL 有什么特别的原因吗?
我想加载一个 png 图像,并获取其中一些像素的颜色(32 位 RGBA 格式)。我已经搜索了很多,但还没有找到一个很好的解决方案。
我发现,使用SDL_LockTexture 进行像素操作。但不想改变图像,只是读取它的一些像素。
【问题讨论】:
由于您没有指定,我假设您正在使用 SDL_image 加载图像。因此IMG_Load 是一个很好的讨论对象。
正如您从链接中看到的那样,它返回一个SDL_Surface(您可能希望将其转换为纹理,但您不需要这样做来读取它的像素)。
有了这样的对象,您可以使用:
使用此函数设置直接访问像素的表面。
使用该函数在直接访问像素后释放一个表面。
文档还指出:
在调用 SDL_LockSurface() / SDL_UnlockSurface() 之间,您可以使用存储在 surface->format 中的像素格式写入和读取surface->pixels。
像素和格式都供您使用。它看起来像一个很好的候选人来做你要求的事情。
但是……
我想加载一个 png 图片,[...]
请注意,IMG_LoadPNG_RW 返回 SDL_Surface 以及 IMG_Load。
【讨论】: