所有
我正在尝试将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的调用似乎是返回Undefined Value(NULL?我无法弄清楚它是否实际加载了bmp - 有点困惑)。
目前我正在将bmps转换为raw,这很容易。
任何人都有更好更清洁的片段吗?
答案 0 :(得分:1)
LoadImage()
只能使用资源编译器加载嵌入到可执行文件中的位图 - 它无法从文件系统加载外部位图。幸运的是,位图文件非常易于阅读。有关文件格式的说明,请参阅Wikipedia。
只需像打开任何其他文件一样打开文件(重要:以二进制模式打开它,即使用"rb"
选项使用fopen
或{{ 1}}使用C ++ ios::binary
)标记,读取位图尺寸,并读取原始像素数据。
答案 1 :(得分:-2)