目前我正在使用System.Windows.Media.DrawingGroup在Children-DrawingCollection属性中存储一些平铺图像(ImageDrawing)。 问题是现在,如果你在Image控件中显示整个DrawingGroup,这个方法会变得非常慢,因为我的DrawingGroup可以包含数百甚至数千个小图像,它实际上可能会破坏性能。
所以我的第一个想法是以某种方式从DrawingGroup中的所有小图像渲染单个图像,然后只显示该图像,这将更快。但是你可能已经发现我没有找到任何解决方案,所以只需将几个图像与WPF Imaging结合起来。
如果有人可以帮助解决这个问题,或者告诉我如何使用DrawingGroup提高性能甚至使用其他方法,那真的很棒。
最后一件事,目前我正在使用RenderTargetBitmap从DrawingGroup生成一个BitmapSource,这种方法并不是真的更快,但它使得在Image控件上滚动和处理至少更加平滑。
答案 0 :(得分:2)
我不确定这是否适用于您的问题,但无论如何我都会在此发布,因为它可能有助于某人:
如果并非所有图形组中的图像同时可见,您可以将ClipGeometry属性设置为您想要绘制的任何属性。这有效地告诉WPF几何外部的部分不需要,并且在渲染过程中将被跳过。
您可以尝试的其他一些事项是:
答案 1 :(得分:1)
我正在处理与平铺图像有关的问题,而且还需要显示一些覆盖在其他图像上的图像。
我没有遇到任何性能问题(可能不会因为我的图像相当小且数量相对较少,大约100个最大值),但我确实遇到了代码示例中的Freeze方法DrawingImage类。它的评论是“冻结DrawingImage以获得性能优势。”
Freeze方法也适用于DrawingGroup类。也许试一试?