SDL 从纹理中读取像素

Posted

技术标签:

【中文标题】SDL 从纹理中读取像素【英文标题】:SDL read pixels from texture 【发布时间】:2013-10-01 12:55:38 【问题描述】:

我想使用 SDL2 库从纹理中读取像素。 我知道直接从纹理中读取像素是不可能的,但是您可以使用以下函数:

int SDL_RenderReadPixels(SDL_Renderer*   renderer,
                     const SDL_Rect* rect,
                     Uint32          format,
                     void*           pixels,
                     int             pitch)

基本上,我想要在我的应用程序中做的是从窗口屏幕读取单个像素并检测它是否是透明像素。 我该如何使用该功能? 什么是 pitch 属性,我如何定义 SDL_Rect 以及如何获得正确格式的像素? 如您所见,我正在检测鼠标左键单击事件并将 x 和 y 坐标传递给方法:

void detectElementOnXandY(SDL_Renderer* renderer, int x, int y)

 // x represents the coordinate x.
 // y represents the coordinate y.

 // Here i have to call the function
 int result = SDL_RenderReadPixels(renderer, rect, format, pixels, pitch);

【问题讨论】:

【参考方案1】:

音高似乎是扫描线的长度(以字节为单位)。所以取决于你的纹理格式:1 * bytesPerPixel。 (可能每个像素 4 个字节) 矩形应该类似于 (x,y,x+1,y+1) 并且格式应该类似于 SDL_PIXELFORMAT_RGBA8888 或您的特定纹理的等效格式。 您可能需要反转 y 坐标,具体取决于 SDL 使用的是 OpenGL(从下到上)约定还是 Windows(从上到下)约定。

【讨论】:

以上是关于SDL 从纹理中读取像素的主要内容,如果未能解决你的问题,请参考以下文章

将 WebGL 2 中的像素读取为浮点值

金属着色器纹理读取与示例

读取 WebGLTexture 中的像素(将 WebGL 渲染到纹理)

SDL 表面像素格式转换

如何在着色器之后读取像素?

OpenGL/OpenGLES 中的帧缓冲纹理行为