使用memDC绘图,在窗口放大后的图像有锯齿状怎么解决?

时间:2022-05-15 23:44:34
为了保存客户区的原有绘图,构建一个memDC,在放缩后原有图像可以保存,但是放大后绘图有锯齿状请问怎么解决。个人认为是放大后Bitmap的尺寸变了,但是应该怎么修改呢?源程序如下
void CMYAPP2View::OnInitialUpdate()
{
memDC.DeleteDC();
memBmp.DeleteObject();
CDC *pDC = GetDC();
OnPrepareDC(pDC);
memDC.CreateCompatibleDC(pDC);
OnPrepareDC(&memDC);
memBmp.CreateCompatibleBitmap(pDC,1000,1000);
memDC.SelectObject(memBmp);
pDC->SetBkColor(RGB(255,255,255));
memDC.SetBkColor(RGB(255,255,255));
memDC.FillSolidRect(-500,-500,1000,1000,RGB(255,255,255));
SetTimer(ID_MYTIMER,30,NULL);
CView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
}

void CMYAPP2View::OnDraw(CDC* pDC)
{
CMYAPP2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CRect ClientRect;
GetClientRect(&ClientRect);

memDC.SelectObject(&memBmp);
CPen myPen;
myPen.CreatePen(PS_SOLID,0.5,RGB(255,0,0));
memDC.SelectObject(myPen);
memDC.MoveTo(CPoint(x1,y1));
memDC.LineTo(x,y);
memDC.SelectStockObject(BLACK_PEN);
pDC->BitBlt(-500,-500,1000,1000,&memDC,-500,-500,SRCCOPY);
myPen.DeleteObject();
// TODO: 在此处为本机数据添加绘制代码
}

5 个解决方案

#1


位图放大后必然失真,没什么好的办法
要想不失真就要保存原图的矢量信息,如直线的两端点,圆心/半径等等,在显示时对矢量信息进行缩放后重现

#2


那能不能在放大后位图和设备环境的结构已经改变但还没有开始重画的时候保存原位图,在重画后再覆盖回去呢?

#3


image zoom out, it must be distorted.If you want to the image show without distortion, u can view it with advanced CRT

#4


绘矢量图

#5


谢谢以上各位了.

#1


位图放大后必然失真,没什么好的办法
要想不失真就要保存原图的矢量信息,如直线的两端点,圆心/半径等等,在显示时对矢量信息进行缩放后重现

#2


那能不能在放大后位图和设备环境的结构已经改变但还没有开始重画的时候保存原位图,在重画后再覆盖回去呢?

#3


image zoom out, it must be distorted.If you want to the image show without distortion, u can view it with advanced CRT

#4


绘矢量图

#5


谢谢以上各位了.