OpenGL并显示灰度图像

时间:2020-08-21 00:55:27

标签: c opengl

我正在尝试使用OpenGL显示灰度图像。我知道在OpenGL上几乎为0,基本上使用的是我在网上找到的示例。以下是我要修改的代码。我本质上是为100x100的图像设置“灰度”值(0到255),因此期望使用全白/黑/灰色的图像。

不过,据我了解,OpenGL希望输入数据为RGB,因此必须为24位(假设每个通道为8位)。我只处理8位图像。我尝试了来自文档http://docs.gl/gl4/glTexImage2D

的不同输入参数(GL_ALPHA / GL_RED)

反正我可以像这样制作一张8位的图片吗?

int image_width = 100;
int image_height = 100;
unsigned char image_data[image_width * image_height];
// Force the grey value for all pixels
for (int i = 0; i < image_height * image_width; i++) {
  image_data[i] = 255;
}
// Create a OpenGL texture identifier
GLuint image_texture;
glGenTextures(1, &image_texture);
glBindTexture(GL_TEXTURE_2D, image_texture);

// Setup filtering parameters for display
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

// Upload pixels into texture
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, image_width, image_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, image_data);

1 个答案:

答案 0 :(得分:0)

如果使用兼容性配置文件OpenGL Context,则可以使用GL_LUMINANCE,其中每个元素都是单个亮度值。参见glTexImage2D

glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, image_width, image_height, 0,
             GL_LUMINANCE, GL_UNSIGNED_BYTE, image_data);