灰度的glDrawPixels?

Posted

技术标签:

【中文标题】灰度的glDrawPixels?【英文标题】:glDrawPixels in grayscale? 【发布时间】:2009-04-14 01:45:38 【问题描述】:

我有一张像这样渲染的图像:

glDrawPixels(image->width, image->height, GL_BGR, GL_UNSIGNED_BYTE, image->imageData);

无论如何我可以用灰度绘制它(而不先将它加载到纹理中)?我不在乎是否只有蓝色分量用于灰度值而不是 L2 范数之类的,我只需要一个快速而肮脏的输出。

GL_LUMINANCE 会很棒,只是它不适用于 3 通道图像。


@timday:

【问题讨论】:

【参考方案1】:

你可以尝试一个不正当的想法,我不知道它是否可行:

glPixelZoom(1.0f/3.0f,1.0f);
glDrawPixels(3*width,height,GL_LUMINANCE,GL_UNSIGNED_BYTE,data);

即,将您的 3 通道图像视为宽 3 倍的 1 通道(灰度)图像,并通过使用 x 缩放因子压缩宽度来补偿这一点。我相信 GL 总是对缩放后的 glDrawPixels 进行最近邻采样,因此它应该根据您的需要始终如一地从每三组样本中挑选出相同的组件。

【讨论】:

天啊.....我不敢相信这行得通!它有点像把图像分成两半,一侧比另一侧颗粒状,但它有效。 可能与内部维护 1.0/3.0 的精度有关(尤其是在达到一定大小时可以正常工作)。我建议稍微调整比率或使用每像素 4 字节的格式和 0.25 的缩放系数。

以上是关于灰度的glDrawPixels?的主要内容,如果未能解决你的问题,请参考以下文章

如何缩放 glDrawPixels?

glDrawPixels 访问冲突读取位置

glDrawPixels() 与 0.375 翻译

malloc() 和 glDrawPixels() 的访问冲突?

使用 glDrawPixels() 在 OpenGL 上绘制像素

数组中的 gldrawpixel rgb 值