首页 > 解决方案 > 有没有办法使用 glDrawPixels 渲染单通道灰度图像?

问题描述

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

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

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

我希望答案类似于上面的片段。

标签: c++openglglutopengl-compat

解决方案


如果你有一个每个像素都是一个灰度值的图像,那么你可以使用format 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);

推荐阅读