您的位置:首页 > 运维架构

OpenGL中x64 debug下bmp图像导入出错解决方案

2015-11-16 19:03 316 查看
在win32环境下,已经提供了GLAUX库,但对于x64位,基本上该库没有提供64为支持。会出现以下错误:
------ 已启动生成:  项目: OpenGL, 配置: Debug x64 ------
1>  OpenGL.cpp
1>OpenGL.cpp(746): warning C4244: “return”: 从“WPARAM”转换到“int”,可能丢失数据
1>OpenGL.obj : error LNK2019: 无法解析的外部符号 auxDIBImageLoadA,该符号在函数 "struct _AUX_RGBImageRec * __cdecl LoadBMP(char *)" (?LoadBMP@@YAPEAU_AUX_RGBImageRec@@PEAD@Z) 中被引用
1>F:\OpenGL\x64\Debug\OpenGL.exe : fatal error LNK1120: 1 个无法解析的外部命令
========== 生成:  成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

对此研究了一下午,并没有什么重大发现;所以索性自己写了一个加载bmp的函数,考虑到上下的兼容性。在此我用到了AUX_RGBImageRec结构,其实就是一个结构体,不愿意用的话可以自己重写一下,具体如下:
typedef struct _AUX_RGBImageRec {
    GLint sizeX, sizeY;
    unsigned char *data;
} AUX_RGBImageRec;

自己写的bmp函数如下:
//自定义加载bmp文件
AUX_RGBImageRec * LoadBMP(char *Filename)
{
unsigned int Texture;
AUX_RGBImageRec * tex_result=new AUX_RGBImageRec; //be careful
FILE* img = NULL;
img = fopen(Filename, "r");

GLint bWidth = 0;
GLint bHeight = 0;
DWORD size = 0;

fseek(img, 18, SEEK_SET);
fread(&bWidth, 4, 1, img);
fread(&bHeight, 4, 1, img);
fseek(img, 0, SEEK_END);
size = ftell(img) - 54;

unsigned char *data = (unsigned char*)malloc(size);

fseek(img, 54, SEEK_SET); // image data
fread(data, size, 1, img);

fclose(img);

glGenTextures(1, &Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, bWidth, bHeight, GL_BGRA, GL_UNSIGNED_BYTE, data);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
tex_result->sizeX = bWidth;
tex_result->sizeY = bHeight;
tex_result->data = data;
// if (data)
// free(data);

return tex_result;
}此处有几个需要注意是地方:
       (1)注意像素格式,是GL_BGRA、GL_RGBA、GL_RGB等的哪一种,否则解析结果不对;
       (2)用此函数需要弄清你所用图像位深格式:32还是24
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  64位