如何将位图读取为 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 文件的函数(所需的函数是 fopen
、fread
和 fclose
)写入保存数据的结构中。然后可以使用该结构将数据提供给glBitmap
。
但请记住,位图只是二进制值图像,即黑色和白色,没有灰色,更不用说颜色了。
现在您的概念是“加载位图”。我已经说过,glBitmap
会立即提取您提供的数据。所以我认为你真正在寻找的是 textures 和纹理加载器的图像文件。
【讨论】:
以上是关于如何将位图读取为 GLubyte 数组? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章