截图功能实现(三)截图放大器实现

     现在好多截图工具都有放大的功能如图 ,这个功能的原理是取当前鼠标位置点(也就是图中十字线相交的点位置)周围多少像素(这里取宽32pix,高40pix),把这区域的图片贴到如图的矩形区域内。
#define  MAGNIFIERSIZE				30 //矩形大小
#define  MAGNIFYINGMULTIPLE			4  //放大倍数
#define  OFFSETWIDE					16 //偏离光标热点(宽)
#define  OFFSETHIGH					20 //偏离光标热点(高)
void CScreenShotDlg::DrawMagnifier(CDC *pMemDC)
{
	CPoint pt(0,0);
	GetCursorPos(&pt);//鼠标当前的屏幕位置实现放大器跟随鼠标移动
	ScreenToClient(&pt);
	CPoint ptLeftTop(pt.x + OFFSETWIDE, pt.y + OFFSETHIGH);
	
	ptLeftTop = rt.TopLeft();
	CDC dcTemp;
	dcTemp.CreateCompatibleDC(pMemDC);
	CBitmap* pOldBitmap = dcTemp.SelectObject(m_pBitmap);//m_pBitmap保存的当前桌面的位图没有进行阿尔法合成的可以看第一章里有如何获取的或者也可以改成你想要的位图
	pMemDC->StretchBlt(ptLeftTop.x, ptLeftTop.y, MAGNIFIERSIZE * MAGNIFYINGMULTIPLE, MAGNIFIERSIZE * MAGNIFYINGMULTIPLE, &dcTemp,
	                   (pt.x  - MAGNIFIERSIZE / 2), (pt.y  - MAGNIFIERSIZE / 2),
	                   MAGNIFIERSIZE,MAGNIFIERSIZE, SRCCOPY);//拉伸图片达到放大的效果

	int nWidth = MAGNIFIERSIZE * MAGNIFYINGMULTIPLE;
	//画中间的十字Begin
	CPen pen;
	pen.CreatePen(PS_SOLID, 3, RGB(0,0,255));
	CPen *pOldPen = pMemDC->SelectObject(&pen);
	pMemDC->MoveTo(ptLeftTop.x, ptLeftTop.y + nWidth / 2);
	pMemDC->LineTo(ptLeftTop.x + nWidth, ptLeftTop.y + nWidth / 2);
	pMemDC->MoveTo(ptLeftTop.x + nWidth / 2, ptLeftTop.y);
	pMemDC->LineTo(ptLeftTop.x + nWidth / 2, ptLeftTop.y + nWidth);
	pMemDC->SelectObject(pOldPen);
	//画中间的十字End

	//画边框Begin
	pMemDC->SelectStockObject(NULL_BRUSH);
	pMemDC->Rectangle(ptLeftTop.x, ptLeftTop.y, ptLeftTop.x + nWidth, ptLeftTop.y + nWidth);
	//画边框End

	
	dcTemp.SelectObject(pOldBitmap);
	dcTemp.DeleteDC();

}
代码就是这样其实还是很简单,稍微改下就可以成为你的图片放大器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值