全部,
我正在尝试将 bmp 文件加载到 GLubyte 数组中(不使用 aux)。
令人难以置信的是,我认为是一项微不足道的任务竟然占用了我几个小时的时间。
在 Google 上似乎找不到任何内容!
这是我一起破解的,但它不太有效:
// load texture
GLubyte *customTexture;
string fileName("C:\\Development\\Visual Studio 2008\\Projects\\OpenGL_Test\\Crate.bmp");
// Use LoadImage() to get the image loaded into a DIBSection
HBITMAP hBitmap = (HBITMAP)LoadImage( NULL, (LPCTSTR)const_cast<char*>(fileName.c_str()), IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
customTexture = new GLubyte[3*256*256]; // size should be the size of the .bmp file
GetBitmapBits(hBitmap, 3*256*256, (LPVOID) customTexture);
GetBitmapDimensionEx(hBitmap,&szBitmap);
发生的情况是对 LoadImage 的调用似乎返回未定义值(NULL?我无法弄清楚它是否实际上正在加载 bmp - 有点困惑)。
目前我正在将 bmp 转换为 raw,那么一切都很简单。
有人有更好、更清晰的代码片段吗?
最佳答案
LoadImage()
只能加载使用资源编译器嵌入到可执行文件中的位图 - 它无法从文件系统加载外部位图。幸运的是,位图文件非常容易阅读。请参阅Wikipedia有关文件格式的描述。
就像打开任何其他文件一样打开该文件(重要:以二进制模式打开它,即使用 fopen 的
或使用 C++ "rb"
选项ifstream
的 ios::binary
标志),读取位图尺寸,并读取原始像素数据。
关于c++ - 如何将bmp加载到GLubyte数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/328019/