我目前正在开发一个应用程序,需要显示大型工程图纸,可以是8800x6800或更大。要求声明用户应该能够平移和缩放图像。理想情况下,他们也希望能够对图像进行注释。如果您查看Windows Photo Viewer,您将看到我想要模拟的性能和功能,减去注释部分。
到目前为止,我已经尝试了几种不同的方法来显示图像,似乎没有提供我正在寻找的性能。他们要么占据很多的记忆,要么他们很慢。这些是我采取的方法:
Viewbox
以Image
为孩子。内存使用情况没问题,但重新调整Viewbox
的大小很慢。我还没有尝试使用这种方法进行缩放/平移。InkCanvas
,Image
设置为背景或儿童。通过这种方法,通过ScaleTransform
和TranslateTransform
进行缩放/平移似乎是如此,但内存使用量可能在450-600 MB范围内。这是我第一次尝试使用.NET / WPF进行图像处理,而且我对这个主题的了解非常有限。处理大图像的最佳实践是什么,尤其是WPF?我已经读到平铺图像(如深度缩放)可以提供帮助,但不确定如何做到这一点,或者在我的情况下这是最好的想法。你知道有哪些资源可以帮助我更好地理解这一点吗?
答案 0 :(得分:1)
如果你的意思是将图像拆分成单独的部分并且一次只显示一个小的子集来提高性能,那么这就称为“虚拟化”。
Microsoft有一个关于虚拟化项目的优秀博客,甚至还提供了VirtualCanvas的参考实现,您可以将其用作虚拟化控件的起点。
此处链接:http://blogs.msdn.com/b/jgoldb/archive/2008/03/08/performant-virtualized-wpf-canvas.aspx
请注意,此博客包括缩放和缩放,作为讨论的一部分,以及有关平滑滚动和先发制人加载磁贴的讨论,以获得最佳的UI响应。