c++ - 有没有办法使用 glDrawPixels 渲染单通道灰度图像?
问题描述
我正在尝试创建一个使用 oiio 和 OpenGL 处理所有类型图像的程序(简单的函数,没什么太疯狂的)。
我有 4 通道和 3 通道图像工作,我只是不确定如何渲染灰度(1 通道)图像。
if (channels == 4){
glDrawPixels(W, H, GL_RGBA, GL_FLOAT, img);
}
我希望答案类似于上面的片段。
解决方案
如果你有一个每个像素都是一个灰度值的图像,那么你可以使用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);
推荐阅读
- python - 使用 Pytest 和 Tox 测试 Test 目录中的所有文件
- makefile - cmake 为 cmake_link_script 试运行
- r - purrr:map2 和 mutate 中的管道问题
- python - 如何通过在python中声明全局来从另一个函数调用变量?
- java - 如何使 showData() 为不同的数据类型提供单独的结果?
- c# - 如何使用 c# Visual Studio 更改 XML 文件中的值
- javascript - 如何使用变量作为选择器定位多个 div
- java - 无法将 java.lang.Class 隐式转换为 c# 对象
- python - python-socketio 客户端无法获取公共数据,但 NodeJS socket.io-client 没有
- r - 识别用于抓取的 Web 表格格式