目前,我正在使用System.Windows.Media.DrawingGroup在Children-DrawingCollection属性中存储一些平铺的图像(ImageDrawing)。
好了,现在的问题是,如果您在Image控件中显示整个DrawingGroup,则此方法会变得非常慢,因为我的DrawingGroup可以包含数百甚至数千个小图像,这实际上会破坏性能。

因此,我的第一个想法是以某种方式从DrawingGroup中的所有小图像中渲染一个图像,然后仅显示该图像,这样会更快。但是,您可能已经发现,我还没有找到任何解决方案,因此只需将几张图像与WPF Imaging结合即可。

如果有人可以解决这个问题,或者告诉我如何使用DrawingGroup改善性能,甚至使用其他方法,那将是非常不错的。

最后一件事,当前我正在使用RenderTargetBitmap从DrawingGroup生成单个BitmapSource,这种方法的速度并不快,但可以使Image控件的滚动和工作至少更加平滑。

最佳答案

我不确定这是否适用于您的问题,但是无论如何我都会在这里发布,因为它可能会帮助某人:

如果不是同一时间可以看到图形组中的所有图像,则可以将ClipGeometry属性设置为想要绘制的任何图像。这有效地告诉WPF,不需要几何之外的零件,并且在渲染过程中会跳过这些零件。

您可以尝试的其他一些事情是:


在将其应用于图像源之前,请Freeze图形组。至少不会造成伤害(除非您确实需要修改实例,但请记住,您始终可以只创建一个新实例,而不用修改旧实例)
尝试不同的方法来显示图形组。例如作为DrawingVisual(被认为是轻量级的)或作为DrawingBrush进行绘画,例如一个矩形。
将较小的图像合并为较小的组,然后将其合并为较大的组。不知道这是否会改善或损害性能,但值得尝试。

08-26 04:11