位图局部放大的闪烁问题——不要刷新“结果区域”
让我苦恼数日的,对图片局部放大会有闪烁的问题解决了,解决的指导思想就是:不刷新那块显示放大结果的区域。
源代码不是我写的,但是我改好的。直接贴过来:
/////////////////////////////////////////////////////////////////以下为局部放大功能代码
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;
}