none
BitBlt()函数的速度 RRS feed

  • 问题

  • HI,在一个Window CE平台上,发现BitBlt()函数很耗时间. 该应用有一个10.4吋LCD显示屏,分辨率800*600 象素.

    在程序中设了TickCount读取2次连续循环之间差值.

    原程序是把整个屏幕裁剪成了几部分需要根据定时跟新的数据画图的,剩下的裁剪下的边边角角不需要更新.

    需要更新的Part,直接各自独立地BitBlt到屏幕DC上.现在连续2次Tickcount差值大概是175-180ms. 

    本想按照双缓冲的思路,需要吧更新Part的临时兼容DC,全部BitBlt到一个整屏800*600的兼容DC,在BitBlt到屏幕DC上.

    尝试把整个屏幕作为Bkground Bitmap加到一个兼容DC,单单加了这个操作,BitBlt()后,发现连续2次TickCount差值增加到了400ms.

    这样双缓冲毫无意义.反而性能变得很差了. 

    请问有何方法可以提高BitBlt速度.或更好的解决方法?

    如下图: 菱形和椭圆以及箭头符号,表示是需要更新的部分.

    其他部分是不需要更新的. 现在的程序是把更新的部分,如菱形,箭头,椭圆全部裁剪出来,单独BitBlt到屏幕DC.

    我想用一个整个屏幕大小的兼容DC,将所有更新部分全部BitBlt到该兼容DC,在由该兼容DC BitBlt到屏幕DC,发现BitBlt太耗时间.



    

    2015年1月24日 3:02

全部回复

  • BitBlt函数的效率已经很高了,除非你用其他技术例如OpenGL或DirectX什么的。要提高BitBlt的效率应该是要减少重绘的区域,但很明显你的重绘区域不能再减了。或者你再看看有没有其他影响效率占用内存的原因。

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年1月26日 6:35