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 *)" ([email protected]@[email protected]@[email protected]) 中被引用
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

时间: 2024-10-11 10:59:16

OpenGL中x64 debug下bmp图像导入出错解决方案的相关文章

WIN 8.1 x64 环境下 COM Surrogate 停止工作解决方案

我的笔记本电脑是THINKPAD T420 4180AT8,NVIDIA NVS 4200M,Intel(R) HD Graphics 3000,WIN 8.1 x64操作系统.在安装完NVIDIA独显驱动后,浏览照片时会跳出“com surrogate 已停止工作”,解决方案为:在桌面上右键启动NVIDIA控制面板,将“全局设置”中的“首选图形处理器”选为“高性能NVIDIA处理器”,在“程序设定”中选择自定义的程序,将“C:\Windows\System32\dllhost.exe”和“C:

windows10操作系统中cmd窗口下telnet功能失效的解决方案

查找windows自带功能,在window10中相当方便.打开windows10的设置面板,在搜索栏中搜索"windows功能",弹出以下界面: 根据弹出的提示"启动或停用windows功能"即可弹出以下windows功能面板,如下所示: 勾选"telnet客户端"即可将windows的telnet功能打开. 原文地址:https://www.cnblogs.com/birdman-oscar/p/9486122.html

远程控制编写之屏幕传输 MFC实现 屏幕截图 发送bmp数据 显示bmp图像

远程控制编写之屏幕传输  MFC实现  屏幕截图 发送bmp数据 显示bmp图像: 一 : 首先要了解bmp图像的结构 详情请看我转载的一篇文章http://blog.csdn.net/hnust_xiehonghao/article/details/37656281 二: 被控端的代码 注意下面代码要放到一个线程中去 因为用到了while死循环 表示一直发送消息  直到对方关闭接收,发送失败后自动退出! 一定要放进线程 DWORD __stdcall SendScreen(LPVOID lpa

JAVA 以字节流读取文件中的BMP图像

用字节流而不是用JAVA的API函数read()有助于大家理解理解BMP的存储方式哈. 同时,从SQL中读取图片的话,也是用字节流读取,需要自己进行转换的. 顺便保存下代码...下次用就有模板了... 只有24位图的哈.   public Image myRead(String path) throws java.io.IOException {     Image image = null;       int biWidth,biHeight,bicount,biSizeImage,npad

matlab从文件夹名中获得该文件夹下所图像文件名

function [s,nameC]=get_FileNameFromFolderPath(path) % 函数调用:[s,nameC]=get_FileNameFromFolderPath(path) % 函数功能:从文件夹名中获得该文件夹下所图像文件名 % 函数输入:path 为文件夹路径 % 函数输出:s 表示状态,当为0时表示正确 % nameC 表示获得的图像名的胞体cell % 函数历史:v0.0 @2013-01-27 created by Aborn cmd = sprintf(

Windows下使用GetGlyphOutline在OpenGL中渲染字体

欢迎转载,请标明出处:http://blog.csdn.net/tianyu2202/ 无图无JB,先上图.使用OpenGL绘制字体,支持多种字体,支持TrueType轮廓字体,支持自选字体纹理大小和输出大小,支持在三维空间内绘制. 关于OpenGL中字体的显示网上其实有很多的教程,不过经常用到的方式有比较简单的Bitmap方式.比较复杂的FreeType方式.而本文介绍的方式虽然只能在Windows下实现,却有着和FreeType一样的显示效果,最重要的是非常简单,仅仅200多行代码即可实现.

关于VS2013优化后MFC中对文件读取失败的解析(debug下可以,release下失败)

经测试: 错误来源于:如下程序,在vs2010下使用GetFileName(),文件可以成功读取,但在VS2013下,使用GetFileName()读取文件在debug下可以,但release下失败,改为GetPathName()后,便可以成功编译. CFileDialog filePCloudDlg(TRUE); filePCloudDlg.m_ofn.lpstrTitle=_T("选择点云文件"); filePCloudDlg.m_ofn.lpstrFilter=_T("

DICOM医学图像处理:DICOM存储操作之“多幅BMP图像数据存入DCM文件”

背景: 本专栏"DICOM医学图像处理"受众较窄,起初只想作为自己学习积累和工作经验的简单整理.前几天无聊浏览了一下,发现阅读量两极化严重,主要集中在"关于BMP(JPG)与DCM格式转换"和"DICOM 通讯协议",尤其是许久前的第一篇博文DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组).因此在2014年底前打算写几篇关于DCM格式转换的文章,此次主要聚焦"如何将BMP.JPG等常规图像保存成DCM文件&q

MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

最近有同学问我如何实现MFC基于对话框在图片控件中加载图片?其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在<数字图像处理>课程中完成的软件都是基于单文档的程序,这里介绍两种在对话框picthre控件中显示BMP图片的最简单基础的方法. ~~方法可能并不完美,高手忽略,但是提供一种能运行的方法,希望对刚接触这方面知识的同学有所帮助.可能你觉得文章过于简单或者有些过于详细叙述(点到即可我并不反对),但也为哪些入门同学想想,当初自己也是一头雾水. 一.静态显示bmp图片