有没有办法使用 glDrawPixels 渲染单通道灰度图像?
Is there a way to render single channel greyscale images using glDrawPixels?
我正在尝试创建一个程序来使用 oiio 和 OpenGL(简单的功能,没有什么太疯狂)来处理所有类型的图像。
我有 4 通道和 3 通道图像可以工作,我只是不确定如何渲染灰度(1 通道)图像。
if (channels == 4){
glDrawPixels(W, H, GL_RGBA, GL_FLOAT, img);
}
我希望答案类似于上面的代码片段。
如果您需要一个每个像素都是单个灰度值的图像,那么您可以使用格式 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);
我正在尝试创建一个程序来使用 oiio 和 OpenGL(简单的功能,没有什么太疯狂)来处理所有类型的图像。
我有 4 通道和 3 通道图像可以工作,我只是不确定如何渲染灰度(1 通道)图像。
if (channels == 4){
glDrawPixels(W, H, GL_RGBA, GL_FLOAT, img);
}
我希望答案类似于上面的代码片段。
如果您需要一个每个像素都是单个灰度值的图像,那么您可以使用格式 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);