资源描述:
《介绍用DIB类实现显示BMP图片》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1、ImageProcessingDoc.h文件首先在ImageProcessingDoc.h文件头部添加一下#include语句:#include"DibImage.h"在ImageProcessingDoc.h文件中添加:public:HDIBGetHDIB()const{returnm_hDIB;}CPalette*GetDocPalette()const{returnm_palDIB;}CSizeGetDocSize()const{returnm_sizeDoc;}CDibImage*GetDibImage()const{returnm_pDibImage;}添加InitDIBD
2、ata()voidInitDIBData();COLORREFm_refColorBKG;添加protected:CDibImage*m_pDibImage;HDIBm_hDIB;CPalette*m_palDIB;CSizem_sizeDoc;voidCImageProcessingDoc::InitDIBData(){//初始化DIB对象if(m_palDIB!=NULL){deletem_palDIB;m_palDIB=NULL;}if(m_hDIB==NULL){return;}LPSTRlpDIB=(LPSTR)::GlobalLock((HGLOBAL)m_hDIB);//判
3、断图像是否过大if(m_pDibImage->DIBWidth(lpDIB)>INT_MAX
4、
5、m_pDibImage->DIBHeight(lpDIB)>INT_MAX){::GlobalUnlock((HGLOBAL)m_hDIB);::GlobalFree((HGLOBAL)m_hDIB);m_hDIB=NULL;CStringstrMsg;strMsg="BMP图像太大!";MessageBox(NULL,strMsg,"系统提示",MB_ICONINFORMATION
6、MB_OK);return;}m_sizeDoc=CSize((int)m_pDibImage->DIBWid
7、th(lpDIB),(int)m_pDibImage->DIBHeight(lpDIB));::GlobalUnlock((HGLOBAL)m_hDIB);//创建新调色板m_palDIB=newCPalette;if(m_palDIB==NULL){::GlobalFree((HGLOBAL)m_hDIB);m_hDIB=NULL;return;}if(m_pDibImage->CreateDIBPalette(m_hDIB,m_palDIB)==NULL){deletem_palDIB;m_palDIB=NULL;return;}}BOOLCImageProcessingDoc::O
8、nOpenDocument(LPCTSTRlpszPathName){CFilefile;CFileExceptionfe;if(!file.Open(lpszPathName,CFile::modeRead
9、CFile::shareDenyWrite,&fe)){ReportSaveLoadException(lpszPathName,&fe,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);returnFALSE;}DeleteContents();BeginWaitCursor();if(m_pDibImage!=NULL){deletem_pDibImage;m
10、_pDibImage=NULL;}m_pDibImage=newCDibImage;TRY{m_hDIB=m_pDibImage->ReadDIBFile(file);}CATCH(CFileException,eLoad){file.Abort();EndWaitCursor();ReportSaveLoadException(lpszPathName,eLoad,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);m_hDIB=NULL;if(m_pDibImage!=NULL){deletem_pDibImage;m_pDibImage=NULL;}returnFA
11、LSE;}END_CATCHInitDIBData();EndWaitCursor();//判断读取文件是否成功if(m_hDIB==NULL){CStringstrMsg;strMsg="读取图像时出错!可能是不支持该类型的图像文件!";MessageBox(NULL,strMsg,"系统提示",MB_ICONINFORMATION
12、MB_OK);if(m_pDibImage!=NULL){deletem_pDibImage;m_