我创建了个BITMAP并在其上做画如下:
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);
CBitmap bm;
bm.CreateCompatibleBitmap(pDC, m_ScreenSize.cx, m_ScreenSize.cy);
CBitmap* pOldBitmap = dcMemory.SelectObject( &bm );
。//做画(基本都是直线、圆、矩形等图形)
我再用CDC::StretchBlt()函数把这个BITMAP的某一部分显示到一个窗口DC上的指定区域。
但是当需要放大或缩小时失真很严重,实线的圆都变成虚线了。
请问怎么可以解决这个问题??

解决方案 »

  1.   

    CDC::StretchBlt()在对图像放大或者是缩小的时候,会自动适用MFC内部封装的插值(采样)算法,所以会失真,最还在显示之前进行自己的放大或缩小算法处理!
      

  2.   

    GDI的拉伸效果不是很好。可以考虑GDI+.
      

  3.   

    GDI+?是什么啊?
    我以前也没怎么接触到位图的处理,对这方面没什么了解。
    你们能不能解释的详细点,或者你们有不有好的算法,谢谢了!!
      

  4.   

    下一个CxImage就不用你动手了,很全的,各种图片格式的
      

  5.   

    下载地址:http://www.hloveloveu.com/down/view.asp?id=49
      

  6.   

    有没有好心人帮帮忙啊,我现在只是要把在内存中创建的一个位图,缩放显示到屏幕上,CDC::StretchBlt()的效果太差了。
      

  7.   

    还是老金厉害啊,一语中的啊,还有gdi+是什么,可以看最新的sdk文档
      

  8.   

    在 dcMemory.StretchBlt()前面加一句 dcMemory.SetStretchBltMode(STRETCH_HALFTONE) 就行了
      

  9.   

    好久没有来了,今天来把没结的贴给结了。
    楼上的兄弟来的太迟了,这个问题自己已经解决了,不过还是要谢谢楼上的 yc_hjh(华***)。
    接分吧!!!