有没有一种方法可以使用glDrawPixels渲染单通道灰度图像?

时间:2019-09-04 13:54:22

标签: c++ opengl glut opengl-compat

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

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

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

我希望答案像上面的代码片段一样。

1 个答案:

答案 0 :(得分:2)

如果您要处理的图像中每个像素都是一个灰度值,则可以使用 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);