【问题标题】:Efficiently displaying and zooming/panning large images in WPF在 WPF 中有效地显示和缩放/平移大图像
【发布时间】:2011-08-05 13:06:39
【问题描述】:

我目前正在开发一个需要显示 8800x6800 或更大尺寸的大型工程图纸的应用程序。要求规定用户应该能够平移和缩放图像。理想情况下,他们也希望能够对图像进行注释。如果您查看 Windows 照片查看器,您会看到我希望模拟的性能和功能,但不包括注释部分。

到目前为止,我已经尝试了几种不同的方法来显示图像,但似乎没有一种方法能够提供我正在寻找的性能。它们要么占用大量内存,要么速度很慢。这些是我采取的方法:

  • ViewboxImage 小时候。内存使用正常,但重新调整Viewbox 的大小很慢。因此,我还没有尝试过使用这种方法进行缩放/平移。
  • InkCanvasImage 设置为背景或子项。使用这种方法,通过 ScaleTransformTranslateTransform 进行缩放/平移看起来一般,但内存使用量可能会在 450-600 MB 范围内上升。

这是我第一次尝试使用 .NET/WPF 进行图像处理,我对该主题的了解相当有限。处理大图像(尤其是 WPF)有哪些最佳实践?我读过平铺图像(如深度缩放)可以提供帮助,但不确定如何做到这一点,或者这是否是我情况下的最佳主意。您知道任何可以帮助我更好地理解这一点的资源吗?

【问题讨论】:

  • 你最后解决了这个问题吗?

标签: c# wpf zooming imaging pan


【解决方案1】:

“平铺”如果您的意思是将图像分成单独的部分并一次只显示一小部分以提高性能,这将被称为“虚拟化”。

Microsoft 有一篇关于虚拟化项目的优秀博客,甚至提供了 VirtualCanvas 的参考实现,您可以将其用作虚拟化控件的起点。

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

请注意,此博客包含缩放和缩放作为讨论的一部分,以及关于平滑滚动和预先加载磁贴以实现最佳 UI 响应的讨论。

【讨论】:

    猜你喜欢
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2016-07-22
    • 1970-01-01
    • 2012-08-27
    • 2017-04-02
    • 2021-03-05
    相关资源
    最近更新 更多