GDI+打开图片画图,结果本来抗锯齿的线逐渐变成不抗锯齿了好奇怪

GDI+打开图片画图,结果原本抗锯齿的线逐渐变成不抗锯齿了好奇怪

h文件:
Bitmap *Image;//全局指针

CPP文件:构造函数中
Image=new Bitmap(640,480);  //初始化




CPP文件:my******View::OnDraw(CDC * pDC)函数中

my******Doc * pDoc= GetDocument();
ASSERT_VALID(pDoc);


----------
----
--

Graphics bmp(Image);//把打开的位图作为画布
bmp.SetSmoothingMode(SmoothingModeAntiAlias);//乃门懂的

CObList *list=pDoc->m_coblist);//打开链表
POSITION pos =list->GetHeadPosition(); //抽出头

 while(pos)
{

CShape* shape=(CShape*)list->GetNext(pos); //取出画图的记录

if(shape->info==1)
{
bmp.DrawLine(&pen,  shape->Start.x,  shape->Start.y,  shape->End.x,  shape->End.y); 
}

 
Graphics g(pDC->GetSafeHdc()); //画到屏幕上的画布
g.DrawImage(Image,0,0);

}



而且画上去的线用反色滤镜完全没效果,位图倒是变了


GDI+打开图片画图,结果本来抗锯齿的线逐渐变成不抗锯齿了好奇怪
以上是反色前


GDI+打开图片画图,结果本来抗锯齿的线逐渐变成不抗锯齿了好奇怪
以上是反色后

------解决方案--------------------
我怎么看之前的是不抗锯齿的,之后是抗锯齿的呢?
------解决方案--------------------
因为你在同一个位图上重复绘制,导致像素重叠。

应该先用另外一个图片作为绘图对象,也即双缓冲的后台图片,每次绘图(OnDraw)时先绘制背景(比如你的位图)到后台图片,再贴到前台窗口,这样就不会有累加的重叠。
------解决方案--------------------
你还是没理解,不要直接在加载的那个图像上绘图!因为Windows的刷新消息不是一次性的,不停在刷新,你不停绘制一个抗锯齿线条上去,因为要和背景融合,像素叠加就产生了加强,抗锯齿效果看起来就逐步减弱了。

另外创建一个位图作为后台缓冲位图,每次都把加载的位图绘制到这个后台缓冲位图上,再在后台缓冲位图上绘制其他线条,然后把后台缓冲位图绘制到窗口。