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);}而且画上去的线用反色滤镜完全没效果,位图倒是变了以上是反色前以上是反色后

解决方案 »

  1.   

    不管你怎么认为,本来就是一直都是抗锯齿,只不过是在加载图片后,这个功能失去效果了,你看代码就知道了啊
    在openfile(打开文件对话框)这里我是这样写的
    void CxxxxxxxxxxxView::OnFileOpen()
    {
    ........
    .....
    ..
    PicPath=dlg.GetPathName();
    Image=Bitmap::FromFile(PicPath.AllocSysString());
    //从打开的文件中构造一个位图对象,Image是全局变量指针
      

  2.   

    还有,加载图片后,新画的线就算暂时没有锯齿,随着不断的刷新OnDraw ,也慢慢变成不抗锯齿(软边部分变成锐利的锯齿)的
      

  3.   

    因为你在同一个位图上重复绘制,导致像素重叠。应该先用另外一个图片作为绘图对象,也即双缓冲的后台图片,每次绘图(OnDraw)时先绘制背景(比如你的位图)到后台图片,再贴到前台窗口,这样就不会有累加的重叠。
      

  4.   

    双缓冲那个图象就是bmp那个对象啊,不过我是用打开的那张图片作为位图载入graphics里面罢了。
    这样处理不对么?总之抗锯齿就这样失去效果了,虽然之后画上去的一开始是有抗锯齿,但是慢慢的就又有锯齿了。
    有人说我每次刷新OnDraw都从头到位取出内容,导致反复重绘的问题,但我不知道只画一次的判断方法。你知道吗?
    我希望自己画的线能够被反色滤镜处理。
      

  5.   


    Image=new Bitmap(640,480);  //初始化
    初始化之后这个位图加载到graphics里是抗锯齿的,我就奇怪为什么加载位图后就不行了,还有保存后也不抗锯齿
      

  6.   

    你还是没理解,不要直接在加载的那个图像上绘图!因为Windows的刷新消息不是一次性的,不停在刷新,你不停绘制一个抗锯齿线条上去,因为要和背景融合,像素叠加就产生了加强,抗锯齿效果看起来就逐步减弱了。另外创建一个位图作为后台缓冲位图,每次都把加载的位图绘制到这个后台缓冲位图上,再在后台缓冲位图上绘制其他线条,然后把后台缓冲位图绘制到窗口。
      

  7.   


    我的思路很简单,就是打开图片,在图片上绘画(最好保留抗锯齿),然后把这个加工过的位图保存成新位图
    滤镜处理也是居于Bitmap *Image;这个加载了位图的指针的,不过画上去的线完全不被滤镜的代码处理,只有位图本身被处理(反色)。