有没有办法使用 glDrawPixels 渲染单通道灰度图像?

Posted

技术标签:

【中文标题】有没有办法使用 glDrawPixels 渲染单通道灰度图像?【英文标题】:Is there a way to render single channel greyscale images using glDrawPixels? 【发布时间】:2019-09-04 13:54:22 【问题描述】:

我正在尝试创建一个使用 oiio 和 OpenGL 处理所有类型图像的程序(简单的函数,没什么太疯狂的)。

我有 4 通道和 3 通道图像工作,我只是不确定如何渲染灰度(1 通道)图像。

if (channels == 4)
   glDrawPixels(W, H, GL_RGBA, GL_FLOAT, img);

我希望答案类似于上面的 sn-p。

【问题讨论】:

看看glDrawPixels。恕我直言,用GL_LUMINANCE 替换GL_RGBA 应该可以处理灰度图像(1 个通道)。 @Scheff 谢谢!那解决了它。我不确定那个命令是什么,因为它听起来不像我需要使用的东西。 【参考方案1】:

如果您需要一个每个像素都是一个灰度值的图像,那么您可以使用 格式 GL_LUMINANCE。见glDrawPixels。 转换后的亮度值设置为红绿蓝颜色通道,alpha通道将设置为1。

如果每个像素的类型是32位浮点值,则格式为GL_FLOAT

glDrawPixels(W, H, GL_LUMINANCE, GL_FLOAT, img);

如果灰度值以字节编码,则必须使用无符号归一化浮点格式GL_UNSIGNED_BYTE

glDrawPixels(W, H, GL_LUMINANCE, GL_UNSIGNED_BYTE, img);

【讨论】:

以上是关于有没有办法使用 glDrawPixels 渲染单通道灰度图像?的主要内容,如果未能解决你的问题,请参考以下文章

灰度的glDrawPixels?

OpenGL:调试“单通道线框渲染”

OpenGL - 渲染到单通道纹理?

WebGL 单通道wireframe渲染

如何缩放 glDrawPixels?

glDrawPixels() 与 0.375 翻译