在WPF中有效地显示和缩放/平移大型图像

本文关键字:大型 图像 缩放 WPF 有效地 显示 | 更新日期: 2023-09-27 17:50:16

我目前正在开发一个需要显示大型工程图纸的应用程序,该图纸可以是8800x6800或更大。需求说明,用户应该能够平移和缩放图像。理想情况下,他们也希望能够对图像进行注释。如果你看一下Windows照片查看器,你会看到我想要模仿的性能和功能,减去注释部分。

到目前为止,我已经尝试了几种不同的方法来显示图像,但似乎没有一种方法能提供我想要的性能。要么它们占用大量内存,要么它们很慢。以下是我采取的方法:
  • Viewbox, Image为子节点。内存使用是OK的,但是重新调整Viewbox的大小很慢。因此,我还没有尝试过用这种方法缩放/平移。
  • InkCanvas, Image设置为背景或子。使用这种方法,通过ScaleTransformTranslateTransform进行缩放/平移似乎一般,但内存使用可能会在450-600 MB范围内上升。

这是我第一次尝试使用。net/wpf进行图像处理,我在这方面的知识相当有限。处理大型图像(尤其是使用WPF)的最佳实践是什么?我读过平铺图像(如深度变焦)可以帮助,但不确定如何做到这一点,或者在我的情况下这是否是最好的主意。你知道有什么资源可以帮助我更好地理解这个吗?

在WPF中有效地显示和缩放/平移大型图像

By "如果您想将图像分割成单独的部分,并且一次只显示一小部分以提高性能,那么这将被称为"虚拟化"。

微软有一个关于虚拟项目的优秀博客,甚至提供了一个VirtualCanvas的参考实现,你可以使用它作为虚拟控件的起点。

链接:https://learn.microsoft.com/en-us/archive/blogs/jgoldb/virtualized-wpf-canvas

请注意,本博客包括缩放和缩放作为讨论的一部分,以及关于平滑滚动和抢占式加载磁贴以获得最佳UI响应的讨论。