欢迎来到天天文库
浏览记录
ID:37848624
大小:67.50 KB
页数:11页
时间:2019-06-01
《MFC显示bmp 图像C++程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VS2008MFC显示bmp图像C++程序下面的函数LoadBmpFile,其功能是从一个.bmp文件中读取数据(包括BITMAPINFOHEADER,调色板和实际图象数据),将其存储在一个全局内存句柄hImgData中,这个hImgData将在以后的图象处理程序中用到。同时填写一个类型为HBITMAP的全局变量hBitmap和一个类型为HPALETTE的全局变量hPalette。这两个变量将在处理WM_PAINT消息时用到,用来显示位图。该函数的两个参数分别是用来显示位图的窗口句柄,和.bmp文件名(全路径)。当函数成功时,返回TRUE,否则返回FALSE。BITMA
2、PFILEHEADER bf;BITMAPINFOHEADERbi;BOOLLoadBmpFile(HWNDhWnd,char*BmpFileName){ HFILE hf;//文件句柄//指向BITMAPINFOHEADER结构的指针LPBITMAPINFOHEADER lpImgData;LOGPALETTE *pPal;//指向逻辑调色板结构的指针LPRGBQUAD lpRGB;//指向RGBQUAD结构的指针HPALETT
3、E hPrevPalette;//用来保存设备中原来的调色板HDC hDc;//设备句柄HLOCAL hPal;//存储调色板的局部内存句柄DWORD LineBytes; //每一行的字节数DWORD ImgSize; //实际的图象数据占用的字节
4、数//实际用到的颜色数,即调色板数组中的颜色个数DWORD NumColors;DWORD i;if((hf=_lopen(BmpFileName,OF_READ))==HFILE_ERROR){MessageBox(hWnd,"Filec:\test.bmpnotfound!","ErrorMessage",MB_OK
5、MB_ICONEXCLAMATION);returnFALSE;//打开文件错误,返回}//将BITMAPFILEHEAD
6、ER结构从文件中读出,填写到bf中_lread(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));//将BITMAPINFOHEADER结构从文件中读出,填写到bi中_lread(hf,(LPSTR)&bi,sizeof(BITMAPINFOHEADER));//我们定义了一个宏#defineWIDTHBYTES(i) ((i+31)/32*4)上面曾经//提到过,每一行的字节数必须是4的整倍数,只要调用//WIDTHBYTES(bi.biWidth*bi.biBitCount)就能完成这一换算。举一个例//子,对于2色图,如果图象宽是
7、31,则每一行需要31位存储,合3个//字节加7位,因为字节数必须是4的整倍数,所以应该是4,而此时的//biWidth=31,biBitCount=1,WIDTHBYTES(31*1)=4,和我们设想的一样。//再举一个256色的例子,如果图象宽是31,则每一行需要31个字节存//储,因为字节数必须是4的整倍数,所以应该是32,而此时的//biWidth=31,biBitCount=8,WIDTHBYTES(31*8)=32,我们设想的一样。你可//以多举几个例子来验证一下//LineBytes为每一行的字节数LineBytes=(DWORD)WIDTHBYTES(b
8、i.biWidth*bi.biBitCount);//ImgSize为实际的图象数据占用的字节数ImgSize=(DWORD)LineBytes*bi.biHeight;//NumColors为实际用到的颜色数,即调色板数组中的颜色个数if(bi.biClrUsed!=0)//如果bi.biClrUsed不为零,即为实际用到的颜色数NumColors=(DWORD)bi.biClrUsed;else//否则,用到的颜色数为2biBitCount。switch(bi.biBitCount){case1:NumColors=2;
此文档下载收益归作者所有