您的位置:首页 > 其它

在MFC中用GDI+实现图片浏览的放大镜效果

2006-09-07 18:37 531 查看
在MFC中用GDI+实现图片浏览的放大镜效果

放大镜效果的实现机制:首先在(以鼠标为圆心的)一个圆内绘制两倍大小的原图像,然后在剩下的区域内绘制原图像。
  绘制放大镜区域内的图像的方法有多种,可以通过设置剪切区域(setclip()、IntersectClip()等等)的方法,绘制两倍大小的整个图像,但只取剪切区域内的一部分。也可以新建一个放大镜大小的图像,在其上绘制两倍图像,然后把新建的图像覆盖到原图上。第一种方法需要重新计算两倍大小图像的左上角坐标。第二种方法绘制的区域要小,但由于放大镜区域是圆形的,新建的图像是方形的,仍然需要设置剪切区域为圆形。
  注意:以下代码应放在窗体的OnMouseMove(UINT nFlags, CPoint point)方法中(响应WM_MOUSEMOVE事件)
假设你已经在MFC中实现了图片浏览功能,graphics为绘图的Graphics对象指针,p_img为所绘制图片的指针,picRect为绘制原图像的区域(Rect对象)

Rect *magnifier; //方形区域
GraphicsPath path; //放大镜圆周
Region *region; //放大镜区域

magnifier=new Rect(point.x-100,point.y-100,200,200); //生成方形区域
path.AddEllipse(*magnifier); //根据方形区域生成圆周
region=new Region(&path); //构造放大镜区域

graphics->IntersectClip(region); //设置剪切区域
graphics->DrawImage(p_img,2*picRect.X-point.x,2*picRect.Y-point.y,2*picRect.Width,2*picRect.Height); //绘制放大镜区域图像

graphics->ReSetClip();
graphics->ExcludeClip(region);
graphics->DrawImage(p_img,picRect); //绘制原图

效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: