




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 ImageProcessingDoc.h文件首先在ImageProcessingDoc.h文件头部添加一下#include语句:#include DibImage.h在ImageProcessingDoc.h文件中添加:public:HDIB GetHDIB() const return m_hDIB; CPalette* GetDocPalette() const return m_palDIB; CSize GetDocSize() const return m_sizeDoc; CDibImage* GetDibImage() const return m_pDibImage; 添加InitDIBData()void InitDIBData();COLORREF m_refColorBKG;添加protected:CDibImage* m_pDibImage;HDIB m_hDIB;CPalette* m_palDIB;CSize m_sizeDoc;void CImageProcessingDoc:InitDIBData()/ 初始化DIB对象if (m_palDIB != NULL)delete m_palDIB;m_palDIB = NULL;if (m_hDIB = NULL)return;LPSTR lpDIB = (LPSTR) :GlobalLock(HGLOBAL) m_hDIB);/ 判断图像是否过大if (m_pDibImage-DIBWidth(lpDIB) INT_MAX |m_pDibImage-DIBHeight(lpDIB) INT_MAX):GlobalUnlock(HGLOBAL) m_hDIB);:GlobalFree(HGLOBAL) m_hDIB);m_hDIB = NULL;CString strMsg;strMsg = BMP图像太大!;MessageBox(NULL, strMsg, 系统提示, MB_ICONINFORMATION | MB_OK);return;m_sizeDoc = CSize(int) m_pDibImage-DIBWidth(lpDIB), (int) m_pDibImage-DIBHeight(lpDIB);:GlobalUnlock(HGLOBAL) m_hDIB);/ 创建新调色板m_palDIB = new CPalette;if (m_palDIB = NULL):GlobalFree(HGLOBAL) m_hDIB);m_hDIB = NULL;return;if (m_pDibImage-CreateDIBPalette(m_hDIB, m_palDIB) = NULL)delete m_palDIB;m_palDIB = NULL;return;BOOL CImageProcessingDoc:OnOpenDocument(LPCTSTR lpszPathName) CFile file;CFileException fe;if (!file.Open(lpszPathName, CFile:modeRead | CFile:shareDenyWrite, &fe)ReportSaveLoadException(lpszPathName, &fe,FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);return FALSE;DeleteContents();BeginWaitCursor();if(m_pDibImage != NULL)delete m_pDibImage;m_pDibImage = NULL;m_pDibImage = new CDibImage;TRYm_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)delete m_pDibImage;m_pDibImage = NULL;return FALSE;END_CATCHInitDIBData();EndWaitCursor();/ 判断读取文件是否成功if (m_hDIB = NULL)CString strMsg;strMsg = 读取图像时出错!可能是不支持该类型的图像文件!;MessageBox(NULL, strMsg, 系统提示, MB_ICONINFORMATION | MB_OK);if(m_pDibImage != NULL)delete m_pDibImage;m_pDibImage = NULL;return FALSE;SetPathName(lpszPathName);/ 设置文件名称SetModifiedFlag(FALSE);/ 初始化胀标记为FALSEreturn TRUE;2、 最后在CImageProcessingDoc类的构造和析构函数中添加如下代码:CImageProcessingDoc:CImageProcessingDoc()/ TODO: add one-time construction code here/ 默认背景色,灰色m_refColorBKG = 0x00808080;/ 初始化变量m_pDibImage = NULL;m_hDIB = NULL;m_palDIB = NULL;m_sizeDoc = CSize(1,1);CImageProcessingDoc:CImageProcessingDoc()/ 判断DIB对象是否存在if (m_hDIB != NULL)/ 清除DIB对象:GlobalFree(HGLOBAL) m_hDIB);/ 判断调色板是否存在if (m_palDIB != NULL)/ 清除调色板delete m_palDIB;m_palDIB = NULL;/ 判断DibImage对象是否存在if (m_pDibImage != NULL)/ 清除DibImage对象delete m_pDibImage;m_pDibImage = NULL;/3、 /*利用ClassWizard为ImageProcessingView类添加如下代码:CImageProcessingViewWM_ERASEBKGNDOnEraseBkgnd4、 然后在CImageProcessingView.cpp中添加实现上述函数功能的代码:BOOL CImageProcessingView:OnEraseBkgnd(CDC* pDC) / 主要是为了设置子窗体默认的背景色/ 背景色由文档成员变量m_refColorBKG指定CImageProcessingDoc* pDoc = GetDocument();CBrush brush(pDoc-m_refColorBKG); CBrush* pOldBrush = pDC-SelectObject(&brush);CRect rectClip;pDC-GetClipBox(&rectClip);/ 获取重绘区域pDC-PatBlt(rectClip.left, rectClip.top, rectClip.Width(), rectClip.Height(), PATCOPY);pDC-SelectObject(pOldBrush); return TRUE;*/*/*/5、 最后对函数OnDraw和OnPreparePrinting做如下修改:void CImageProcessingView:OnDraw(CDC* pDC)BeginWaitCursor();CImageProcessingDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);HDIB hDIB = pDoc-GetHDIB();if (hDIB != NULL)LPSTR lpDIB = (LPSTR) :GlobalLock(HGLOBAL) hDIB);int cxDIB = (int) pDoc-GetDibImage()-DIBWidth(lpDIB);int cyDIB = (int) pDoc-GetDibImage()-DIBHeight(lpDIB);:GlobalUnlock(HGLOBAL) hDIB);CRect rcDIB;rcDIB.top = rcDIB.left = 0;rcDIB.right = cxDIB;rcDIB.bottom = cyDIB;CRect rcDest;if (pDC-IsPrinting()/ 是打印,计算输出图像的位置和大小,以便符合页面/ 获取打印页面的水平宽度(象素)int cxPage = pDC-GetDeviceCaps(HORZRES);/ 获取打印页面的垂直高度(象素)int cyPage = pDC-GetDeviceCaps(VERTRES);/ 获取打印机每英寸象素数int cxInch = pDC-GetDeviceCaps(LOGPIXELSX);int cyInch = pDC-GetDeviceCaps(LOGPIXELSY);/ 计算打印图像大小(缩放,根据页面宽度调整图像大小)rcDest.top = rcDest.left = 0;rcDest.bottom = (int)(double)cyDIB * cxPage * cyInch)/ (double)cxDIB * cxInch);rcDest.right = cxPage;/ 计算打印图像位置(垂直居中)int temp = c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民宅建筑方案设计规范
- 关于素质活动的方案策划
- 环境清洁活动策划方案模板
- 五四环保活动策划方案
- 都江堰建筑方案设计
- 配电柜改造施工方案
- 2025年中级会计职称考试模拟试卷 解析版 考试技巧
- 基于数据分析的市场营销策略
- 2025工会考试题库及答案
- 2025河北邯郸武安市选聘农村党务(村务)工作者180人笔试备考试题及参考答案详解一套
- GB/T 34399-2025医药产品冷链物流温控设施设备验证性能确认技术规范
- 2025年创伤急救题库(附答案)
- 重难点01溶质质量分数的分析与计算(重难点讲义)原卷版
- 地方病防治技能竞赛试题及答案
- 2025年秋期新课标人教版六年级上册数学全册教案(核心素养教案)
- 高职考试管理办法
- 福州市晋安区社区工作者招聘笔试真题2024
- 2025年半导体制造用胶膜市场调查报告
- 家长学校亲子沟通课件
- 超声科主任竞聘演讲稿
- 工地工伤预防培训
评论
0/150
提交评论