如何将位图读取为 GLubyte 数组? [关闭]

Posted

技术标签:

【中文标题】如何将位图读取为 GLubyte 数组? [关闭]【英文标题】:How do you read a bitmap as a GLubyte array? [closed] 【发布时间】:2011-11-22 13:19:54 【问题描述】:

我知道 a question 已经有这个问题了,但它没有在代码中给出解决方案。

我正在尝试使用此函数将位图图像加载到 GL 应用程序中:

void glBitmap(GLsizei  width,
              GLsizei  height,
              GLfloat  xorig,
              GLfloat  yorig,
              GLfloat  xmove,
              GLfloat  ymove,
              const GLubyte *  bitmap);

谁能给我一个函数,在给定文件名的情况下返回GLubyte*?我一直在网上寻找可行的算法,但似乎没有任何工作。

【问题讨论】:

@Mat pastebin.com/sUz0e5h4 它不是很干净,需要一些调整,但我仍然不明白为什么它不起作用。 在您的问题(不是那个链接)中发布相关代码,以便人们可以查看它并告诉您哪里出了问题/什么可以更好。并描述什么不起作用/_如何_它失败了。 那你不在正确的网站上。网上有数百个从 C 和 C++ 文件中读取二进制数据的示例。尝试自己实现它。一旦您遇到特定的编码问题,请随时在此处提问,但人们不会为您编写代码。 谷歌。真的。寻找加载位图的教程。相信我,你不是第一个尝试从文件中加载位图的人。 尼克,如果你有一段代码你已经尝试过了,并且它有点工作但不是真的(崩溃,糟糕的结果,等等),然后在这里发布 【参考方案1】:

使用glBitmap显示图像的问题是你需要从文件中加载图像,然后将数据解释为颜色索引数组。由于每个可能的库和示例都将图像数据解释为 RGB(或 RGBA),并且由于需要使用 glColorTable 设置颜色表,因此没有人使用 glBitmap 来加载图像,因此没有关于如何将 glBitmap 与数据一起使用的真实示例从文件中加载。

顺便说一句,这是来自glBitmap reference page:

位图图像被解释为 glDrawPixels 的图像数据 命令,宽高对应宽高 该命令的参数,类型设置为 GL_BITMAP 和格式 设置为 GL_COLOR_INDEX。

省去麻烦,使用 glDrawPixels 或纹理来显示文件中的图像。

This page 包含如何使用 glBitmap 显示图像的示例,而不是来自文件。

【讨论】:

【参考方案2】:

首先您需要了解glBitmap 的作用:glBitmap 是一个绘图 函数。它查看给定数据的每个位(因此 映射),解释为二维数组并相对于当前栅格位置(使用glRasterPos 设置)将这些像素设置为当前设置的栅格颜色 (glRasterColor) 设置了位图中的相应位。每个 GLubyte 包含 8 位,因此每个字节涵盖 8 个像素宽度(使用 glPixelStore 设置字节序)。

用于从文件中读取位图。 AFAIK 只有一种广泛使用的位图格式(与具有通道的像素图相反,其中每个像素的通道可以采用一系列值)。该格式为 PBM:http://en.wikipedia.org/wiki/Netpbm_format

鉴于 Wikipedia 页面上的信息,可以直接将打开和读取 PBM 文件的函数(所需的函数是 fopenfreadfclose)写入保存数据的结构中。然后可以使用该结构将数据提供给glBitmap

但请记住,位图只是二进制值图像,即黑色和白色,没有灰色,更不用说颜色了。

现在您的概念是“加载位图”。我已经说过,glBitmap 会立即提取您提供的数据。所以我认为你真正在寻找的是 textures 和纹理加载器的图像文件。

【讨论】:

以上是关于如何将位图读取为 GLubyte 数组? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将双数组列表转换为位图? [关闭]

如何在 C# 中从位图中读取文本? [关闭]

如何将组成文件的原始位显示为位图图像? [关闭]

将位图转换为字节数组

将 unsigned char * 数组可视化为位图 [关闭]

如何将图像,Pdf,Docx和Doc文件转换为位图[关闭]