MFC显示bmp 图像C++程序

MFC显示bmp 图像C++程序

ID:37848624

大小:67.50 KB

页数:11页

时间:2019-06-01

MFC显示bmp 图像C++程序_第1页
MFC显示bmp 图像C++程序_第2页
MFC显示bmp 图像C++程序_第3页
MFC显示bmp 图像C++程序_第4页
MFC显示bmp 图像C++程序_第5页
资源描述:

《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;       

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。