位图局部放大的闪烁问题——不要刷新“结果区域”(转)

位图局部放大的闪烁问题——不要刷新“结果区域”

让我苦恼数日的,对图片局部放大会有闪烁的问题解决了,解决的指导思想就是:不刷新那块显示放大结果的区域。

源代码不是我写的,但是我改好的。直接贴过来:

/以下为局部放大功能代码


ContractedBlock.gif ExpandedBlockStart.gif VC代码
 
   
/// // 以下为局部放大功能代码
else if ( 3 == m_drawType)
{
srect.left
= point.x - s; // 原始区域,s(source)
srect.top = point.y - s;
srect.right
= point.x + s;
srect.bottom
= point.y + s;

drect.left
= point.x - d; // 放大后的区域,d(destination)
drect.top = point.y - d;
drect.right
= point.x + d;
drect.bottom
= point.y + d;

mrect.left
= oldx - d; // mrect我就不大清楚啥意思了
mrect.top = oldy - d;
mrect.right
= oldx + d;
mrect.bottom
= oldy + d;
dd
= 2 * d; // 显示放大结果的正方形区域的边长
/ // 计算放大区域
CDC * pDC = GetDC();

// 放大图像
if (recover)
{
pmap
= bitmap.FromHandle(hBitmap);
MemDC.SelectObject(pmap);

CRect rect;
GetClientRect(
& rect);

pDC
-> BitBlt( 0 , 0 ,point.x - d,rect.Height(), // 恢复原图左侧
& MemDC, 0 , 0 ,SRCCOPY);
pDC
-> BitBlt(point.x + d, 0 ,rect.Width() - point.x - d,rect.Height(), // 恢复原图右侧
& MemDC,point.x + d, 0 ,SRCCOPY);
pDC
-> BitBlt(point.x - d, 0 , 2 * d,point.y - d, // 恢复原图上侧
& MemDC,point.x - d, 0 ,mana);
pDC
-> BitBlt(point.x - d,point.y + d, 2 * d,rect.Height() - point.y - d, // 恢复原图下侧
& MemDC,point.x - d,point.y + d,mana);

recover
= FALSE;
}

pmap
= bitmap.FromHandle(hBitmap); // 此处为其他变换函数出口,可在其他变换基础上局部放大
MemDC.SelectObject(pmap);

pDC
-> StretchBlt(drect.left,drect.top, // 放大
drect.Width(),drect.Height(), & MemDC,srect.left,
srect.top,srect.Width(),srect.Height(),SRCCOPY);

oldx
= point.x;
oldy
= point.y;
ReleaseDC(pDC);

recover
= TRUE;
}

转载于:https://www.cnblogs.com/zhuchao/archive/2010/07/20/1781359.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值