c++ - 如何将bmp加载到GLubyte数组中?

标签 c++ opengl glut

全部,

我正在尝试将 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 的 "rb" 选项 或使用 C++ ifstreamios::binary 标志),读取位图尺寸,并读取原始像素数据。

关于c++ - 如何将bmp加载到GLubyte数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/328019/

相关文章:

时间:2019-05-01 标签:c++: variadic template and function overloading

c++ - Qt找不到GL库

c++ - 调整光源大小

c - 在 OpenGL 动画中实现延迟/刷新

c++ - 在 C : How to properly write some sort of "delete/dispose" function? 中使用 C++ 类

c++ - 是否可以编写通用的重新绑定(bind)模板?

C++图像数组类型

c - 使用 OpenGL 进行像素完美的 2D 渲染

c# - 如何在 OpenTK 的 GlControl 中实现更好的抗锯齿?

C++:无法使用类型为 'void (*)()' 的右值初始化类型为 'void' 的参数