我在做个小游戏,支持按对话框大小缩放,动态改变背景大小。
使用40ms每帧,也就是1s画25次,使用的是settimer。使用了双缓冲画图,问题是,当画的图比较小时候,没问题,但一旦全屏
贴背景位图,CPU  直接飙到50!!!!!!why?效率如此低?
请问各位前辈解决办法是啥?我不了解directX或GDI+. 但我仅仅是使用了StrentchBlt,BitBlt贴大尺寸图(全屏图,资源不大)为何效率会如此低?

解决方案 »

  1.   

    gdi大尺寸图片贴图确实有点慢,但是每次图片的背景不是全都需要重绘吧?你看能不能把需要改变的地方进行处理,其他地方不刷新.
    如果实在要全部刷新,建议你用OpenGL,贴图效率很不错的
      

  2.   

    用DX或OpenGL,也可以用DX封装库WPF,网上有用native C++调用.net库的例子。如非要用GDI的话,建议进行局部更新
      

  3.   

    转OpenGL或者DX需要时间,如果要转直接用OSG吧
    如果用GDI+的话,建议用屏幕最大化作为基准进行帧率测试(硬件平台一致),然后在此基础上:
    1.尽量减少刷新中临时New或者建立变量,包括内存DC(设为类或全局变量)
    2.尽量减少贴图等的大小,只要够用够清晰即可,图片源文件尽量与贴图大小一致,防止贴图中的放大或者缩小操作,透明的PNG类图形尽量拆分成多个能够表示的小PNG,不要直接使用一整个大的PNG
    3.减少区域操作,例如合并,交叉,联合等,而使用算法来实现
    4.能够不全屏刷新背景的地方尽量使用局部刷新。
    5.窗口外多余的绘图部分使用SetClip先前去除,减小有效绘图区域。
      

  4.   

    WGF模板貌似能解决楼主的问题...