Jackery's Special Column

Today is difficult,tomorrow is more difficult,but the day after tomorrow is beautiful,Keep Fight !...

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

在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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gggg_ggg/article/details/49870135
文章标签: 64位
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭