MFC实现图形放大缩小

MFC实现图形放大缩小 本文将通过MFC库函数StretchBlt的使用来实现对图像位图的局部细节的放大功能,并且可以随意放大、缩小,选取到合适的放大倍数来对图像的细节进行观察。 一、引言 在观察图像时,我们经常需要对图像进行放大或缩小,以便更好地观察图像的细节。Windows操作系统提供了一个放大程序,但是该程序只能以固定的放大倍数进行观看,有时不能满足我们的需要。因此,我们需要使用MFC库函数StretchBlt来实现对屏幕图象的局部放大,并且可以随意放大、缩小,选取到合适的放大倍数来对图像的细节进行观察。 二、设计与实现 本程序主要用来对图像的局部进行可调倍数的放大,应当具有以下主要功能: 1. 移动MOUSE放大显示图像的不同部位 2. 左击增加放大倍率、右击减少放大倍率 从光学角度来看,对物体的放大成像是通过把较小的真实物体显示成尺寸较大的虚像来实现的。因此我们可以用类似的原理,把图像中待放大的区间从较小的显示范围拉伸到一个比较大的显示范围即可达到图像放大的效果,两个区间的比值也就是图像的放大倍率。可以通过缩小源区间的范围或扩大放大区间的范围来实现放大倍率的调整。 在MFC基本类库中提供有CDC类的StretchBlt函数可以将一幅位图从一个源矩形以一定的光栅操作拷贝到另外一个不同大小的目标矩形中去,因此可以用此函数来实现图象放大的功能,其函数原形声明如下: BOOL StretchBlt( int x, int y, //目标矩形的坐标原点 int nWidth, int nHeight, //目标矩形的长度和宽度 CDC* pSrcDC, //源设备环境句柄 int xSrc, int ySrc, //源矩形的坐标原点 int nSrcWidth, int nSrcHeight, //源矩形的长度和宽度 DWORD dwRop ); //光栅操作标志 当指定的源和目标矩形的宽度或高度不一样时,StretchBlt函数将创建一个位图的镜像。如果是宽度有变化,就沿x轴创建镜像;如果是高度上有变化就沿y轴创建镜像。而且该函数可以在内存中对源图象做拉伸或压缩处理后再拷贝到目标矩形中去。 三、实现代码 为CImageView增加以下成员数据: CSize m_sizeDest; CSize m_sizeSource; CBitmap * m_pBitmap; CDC * m_pdcMem; int oldx,oldy,s,d; //确定被放大区域, d 确定放大显示区域,放大倍率=d/s bool recover; long mana; 在资源中加入自己喜欢的位图并设为IDB_BITMAP1,对CImageView的以下消息编程: CImageView::CImageView() { // Initialize values m_pdcMem = new CDC; m_pBitmap = new CBitmap; recover = true; s = 30; d = 45; mana = SRCCOPY; } CImageView::~CImageView() { delete m_pdcMem; delete m_pBitmap; } 要放大图像首先要把图像显示出来,一般可以从文件动态装载或者直接从资源中用LoadBitMap读取位图资源。下面的代码放在视类的OnDraw函数中,用以在第一次调用时将位图装载并显示出来,以后再被调用只是负责重画: static bool load; if (!load) { BITMAP bm; load = !load; //装载位图到m_pBitmap m_pBitmap->LoadBitmap(IDB_BITMAP1); //创建相关的设备环境 m_pdcMem->CreateCompatibleDC(pDC); //将位图从m_pBitmap中装载到m_pdcMem中 m_pdcMem->SelectObject(m_pBitmap); m_pBitmap->GetObject(sizeof(bm),&bm); m_sizeSource.cx = bm.bmWidth; m_sizeSource.cy = bm.bmHeight; m_sizeDest = m_sizeSource; //把位图从m_pdcMem中装载到当前正在使用的设备环境中 pDC->StretchBlt(0,0,m_sizeSource.cx,m_sizeSource.cy,m_pdcMem,0,0,m_sizeSource.cx,m_sizeSource.cy,mana); 本文通过MFC库函数StretchBlt的使用来实现对图像位图的局部细节的放大功能,并且可以随意放大、缩小,选取到合适的放大倍数来对图像的细节进行观察。













- 一只正在啃的蜗牛2018-10-14有点帮助,

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网站建立策划书(1).doc
- 关于网站推广方案3篇(1).docx
- 大数据下税收治理隐私保护探讨(全文)(1).doc
- 基于JSP会议管理系统毕业设计论文(含源文件)(1).doc
- PLC控制技术在煤矿的应用研究的论文-计算机应用论文(1).docx
- 信息化工作总结(1)(1).doc
- 企业网站建设合同(一)(2)(1).docx
- 毕业设计-化妆品网站营销模式对比(1).doc
- 筑业北京市经典建筑重点工程资料管理软件教你如何填写资料以及填写范例(1).doc
- 语文教案-电子计算机与多媒体(1).doc
- 电信专业毕业论文-基于MATLAB的PSK系统仿真(1).doc
- 安卓系统从入门到精通------(1).pdf
- 信息技术部程序设计员岗位说明书(1).docx
- 如何将智能化、信息化技术进一步融入道路运输车辆技术管理工作(1).pptx
- 馆宾温湿度控制系统设计-单片机原理及接口技术课程设计--本科毕业设计(1).doc
- 基于单片机的超声测距仪毕业设计(1).doc


