比如内存中有一幅3xxx-2xxx的图
在一个500~400的窗口中拖动会很慢,有明显的延迟现象 (P4 2.8C 512RAM)
有什么方法能大副提高速度?

解决方案 »

  1.   

    根据当前滚动窗口和实际显示图像的大小,得到放大倍数,再依据当前滚动窗口的位置和客户区的大小,计算出要绘制到客户区的原始图像区域,然后再stretchblt或StretchDibToDevice.优点:绘制很快,缺点:放大倍数大一些时候,拖动会一个方块一个方块的显示,不能像ACDSee那样显示大图像也一样平滑.
      

  2.   

    只显示在可视部分的图像。
    不知为何,GDI+是多了很功能,但性能却不如GDI,就好比VMR-9还不如传统的VideoRender
      

  3.   

    Graphics *gdcct=new Graphics(Screen->Canvas->Handle);//得到屏幕500x400
    CachedBitmap cachedBitmap(Temple, gdcct);//Temple是很大的图象
    gdcct->SetClip(Rect clip(0,0,Screen->Width,Screen->Height));//裁减显示区域
    gdcct->DrawCachedBitmap(&cachedBitmap, x, y);//写缓冲
    delete gdcct;我是这样的做的
      

  4.   

    拖动是指拉动滚动条么?ps GDI+是要慢一些,如果提高速度,可能需要你判断窗口的位置,只显示窗口位置的图片,
    ,双缓存不知道是否管用了。。
      

  5.   

    如果某些范围的内容只是从一个地方拖动到另外一个地方的话, 用ScrollDC来可以大幅提高绘制速度. 然后你再去绘制那些新生成的地区.
      

  6.   

    Screen->Canvas->Handle 不就是 HDC 么.
      

  7.   

    Screen->Canvas->Handle 是最终画上去的地方 
    移动HDC是可以,但也只是一小块地方移动啊
      

  8.   

    在一个500~400的窗口中拖动会很慢
    _______
    你拖动时, 鼠标移动一下顶多50个象素, 剩下的 400*300 的图形都可以通过SCROLLDC来平滑地复制过去, 你只需要重画那些要完全绘制的部分.Screen->Canvas->Handle 是最终画上去的地方 
    ______
    SCROLLDC就是对这个操作的. 这个函数据功能说是显卡驱动提供的.直接在显卡缓存中完成复制
      

  9.   

    如果分块显示应该怎么操作?“鼠标移动一下顶多50个象素”我理解不了?另外能不能用directdraw
      

  10.   

    我觉得 GDI+ 注重于图像处理,比如Alpha透明等,如果要速度还是用 GDI 快点,当然DirectX 更快.
      

  11.   

    to everandforever(Forever) 
    我试过了,还是很慢
    我发现并不是拖动screen的hdc造成的
    而是那幅很大的图->drawimage到screen的时候慢.
    也就是无论screen大小,只要是画到screen上,同样是很慢!
      

  12.   

    能看一下你的源码吗?应不会这么慢可能是你实现方法不得当呀..
    就用GDI我想也会很快了一张图最多不过几十M,而400*500的也不过
    最多几M.发来看看共同研究吧!
      

  13.   

    楼上的牛!!
    偶不懂GDI+编程啊,前半个月我说的那个方法是先做一个兼容内存DC,其中的cbitmap和客户区一样大小,首先计算出要显示在客户区的部分在源图像中是哪块区域,然后stretchDibsToDevice或StretchBlt到内存DC,最后再BitBlt到显示DC。缺点是:由于是计算源图像的哪块区域用了取整,拖动过程是“一个方块一个方块的拖动”,拖动效果不够平滑。
    偶又做了一个兼容内存DC,cbitmap是客户区的3倍大小,根据视口ScrollPos和ScrollSize,放置一个CRect表示当前客户区要显示的内容映射到cbitmap里的坐标,这样就可以平滑拖动了。
      

  14.   

    楼主能不能把你的拖动图片的源马给我看看啊.小弟也正要作一个提供这功能的FUNCTION,请帮忙,我送分你啊,多谢!
      

  15.   

    GDI + 本来主慢,没办法