这是对此类似问题的补充:Which is faster when animating the UI: a Control or a Picture?。
我递归地遍历一个形状树并将每个可见形状绘制到屏幕上。在大约2-3代时,当用户实时放大或平移时,事物处理顺利,但是当它达到大约4-6代时,事情变慢。
为了帮助提高性能,最好在每次树更新时绘制一个位图,然后在每次失效时绘制该位图,或者在每次失效时都经历递归吗?
我现在正在研究这个解决方案,但在我结束之前你的答案仍然很受欢迎!
答案 0 :(得分:1)
在内存中绘制位图比绘制到屏幕更快。如果您在每次更新时重新绘制整个屏幕,那么您最好 更好地组合位图,然后将该位图blit到屏幕上。如果您只更新屏幕的一部分,那么您必须权衡屏幕的多个blits是否比组成位图并将整个图形绘制到屏幕上更快。
通常,您最好在内存中编写位图,然后将组合的位图写入屏幕。这通常更快,并且还可以减少重叠区域快速连续更新时的闪烁。
其他信息:
根据位图的大小,您可能不希望在每个无效调用上绘制整个内容。一种解决方案是如上所述更新存储器中的位图,但也跟踪更新的区域(边界框)。然后,您可以组合边界框并可能执行几个小的绘制操作,这比将整个位图绘制到屏幕上要快。这可以更有效,但代码变得相当复杂。通常情况下,我看到的代码实际上说:“如果区域的数量大于N,或者多个区域覆盖的区域超过总面积的X%,那么只需绘制整个位图。” N和X的数字是在程序启动时确定的。