我要实现放大缩小,我现在是这么做的,先用SetDIBitsToDevice或者SetDIBits把DIB转换位DDB显示在内存DC中,不放大,然后再用StretchBlt放大,这样比直接用StretchDIBits放大DIB位图速度要快些,但是现在速度还是不理想,不知道有没有更快的方法

解决方案 »

  1.   

    我以前就是用DirectX做的,也差不多的,最主要的是在窗口模式下不能使用调色板,每个点要用4个字节存储,太浪费了,对点的操作也没有1个字节的方便,所以就放弃了
      

  2.   

    先用StretchDIBits放大到内存DC里面,再BitBlt。
      

  3.   

    先用StretchDIBits放大到内存DC里面,再BitBlt。
    ----------------
    好办法
      

  4.   

    cnzdgs 的方法可行。
    你不妨試一下。
      

  5.   

    速度不理想,我想问题应该出在DIB位图的显示上
      

  6.   

    搞错了,czdgs说的是我以前用的方法,没有DIB转DDB这一步,直接放大到内存DC,然后在BITBLT到真实DC,这样速度要比我现在说的方法慢
      

  7.   

    名字写错了,抱歉,cnzdgs,顺便问一下,dgs是什么意思啊,在驱网上看到不少
      

  8.   

    你所说的速度是指哪些过程的速度?是界面刷新还是从DIB到界面刷新完或者其它?另外最好再描述一下程序要实现的是什么,以便大家理解问题。以前也有人问我dgs是不是公司缩写,可能确有这家公司,不过在我ID中没有特殊含义。
      

  9.   

    就是把DIB位图显示到内存DC的速度,我要问的是这个,用哪个函数效率更高些?我的程序要实现的是DIB位图的放大缩小功能
      

  10.   

    如果图像文件大,最好用个临时文件。这个文件里存的是该图像的按照比例缩小后的图像。当你放大或缩小时,直接去这个临时文件中找相应比例的图像就行,省去了Stretch部分的开销。当然,在加载图像时会增加一些开销
      

  11.   

    StretchBlt的速度应该是很快的,我试了下DrawDibDraw放大的速度,不如StretchBlt
      

  12.   

    楼主如果觉得SetDibToDevice速度还不错的话,那么应该考虑自己实现Stretch,自己实现不是说一定要自己写Stretch代码,网上找找也行啊,看看有没有用MMX优化过的算法,估计应该有的。这样缩放的速度优化问题就有更多可控的选择了。