题
所有人,
我努力装载了一个bmp文件成GLubyte阵(不使用aux).
这是令人难以置信的怎么样,我以为会是一个简单的任务是吸了个小时的时间。
似乎找不到任何东西上谷歌!
这是我砍死在一起,但它并不完全工作:
// 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原则,它的所有容易的。
任何人有任何更好和更清洁的片断?
解决方案
LoadImage()
只能加载嵌入与资源编译器可执行文件的位图 - 它不能从文件系统加载外部的位图。幸运的是,位图文件是非常简单的阅读自己。请参阅维基百科,在文件格式的描述。
只要打开该文件就像你使用任何其他文件(重要:以二进制方式,即使用"rb"
或使用C ++ fopen
的ios::binary
标志ifstream
选项打开它),请阅读该位图尺寸,并读取在原始像素数据。
其他提示
不隶属于 StackOverflow