这是对这个类似问题的补充:Which is faster when animating the UI: a Control or a Picture?。
我递归地遍历形状树,并将每个可见形状绘制到屏幕上。在大约2-3代时,当用户实时放大或平移时,事情处理得很顺利,但当达到大约4-6代时,事情就会变慢。
为了帮助提高性能,更好的做法是在每次树更新时绘制位图,然后在每次无效时绘制该位图,还是在每次无效时进行递归?
我现在正在研究解决方案,但在我完成之前,您的回答仍然令人感激!
发布于 2012-10-24 09:33:16
在内存中绘制位图将比在屏幕上绘制更快。如果您在每次更新时都要重新绘制整个屏幕,那么您最好先合成位图,然后再将位图显示在屏幕上。如果你只更新屏幕的一部分,那么你必须权衡屏幕上的多个blits是否会比合成位图并将整个东西绘制到屏幕上更快。
通常,最好在内存中合成位图,然后将合成的位图写入屏幕。这通常更快,而且还减少了闪烁,如果重叠区域快速连续更新,您将看到这种闪烁。
其他信息:
根据位图的大小,您可能不希望在每次无效调用时都绘制整个内容。一种解决方案是如上所述更新内存中的位图,但也要跟踪更新的区域(边界框)。然后,您可以组合边界框,并可能执行几个比将整个位图绘制到屏幕更快的小绘制操作。这可能会更有效,但代码会变得相当复杂。通常,我见过这样的代码:“如果区域的数量大于N,或者如果多个区域覆盖的面积超过总面积的X%,则只需绘制整个位图。”N和X的数字是在程序启动时确定的。
https://stackoverflow.com/questions/13041739
复制相似问题