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

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

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

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


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;
}

posted on 2010-07-20 13:58  朱超  阅读(393)  评论(0编辑  收藏  举报