c++ - 有没有办法使用 glDrawPixels 渲染单 channel 灰度图像?

标签 c++ opengl glut opengl-compat

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

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

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

我希望答案与上面的代码片段类似。

最佳答案

如果您需要的图像中每个像素都是单个灰度值,那么您可以使用 格式 GL_LUMINANCE。请参阅glDrawPixels .
亮度值转换后设置为红、绿、蓝颜色 channel ,alpha channel 设置为1。

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

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

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

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

关于c++ - 有没有办法使用 glDrawPixels 渲染单 channel 灰度图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57789988/

相关文章:

c++ - 通过键值的查找函数在 map 中搜索不正确

c++ - 如何在 C++ 中查找 3D 空间中的相邻点

opengl - 如何在旋转对象时在OpenGL中固定光源?

c++ - 在 OpenGL 中用一些颜色填充 Bresenham 圆

c++ - 在构造之前调用实例上的非成员函数

C++选择排序——插入方法和私有(private)变量

c++ - OpenGL 着色器不绘制东西 :/

c - 设置 3D OpenGL 透视投影的最简单方法

c++ - 用鼠标在 OpenGL GLUT 中绘制多边形

c++ - 关于在任何计算机上以相同速度运行程序的问题