微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 在WPF中高效显示和缩放/平移大图像

我目前正在开发一个应用程序,需要显示大型工程图纸,可以是8800×6800或更大.要求声明用户应该能够平移和缩放图像.理想情况下,他们也希望能够对图像进行注释.如果您查看 Windows Photo Viewer,您将看到我想要模拟的性能功能,减去注释部分.

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

>带有图像的ViewBox作为孩子.内存使用情况没问题,但重新调整ViewBox的大小很慢.由于这个原因,我还没有尝试使用这种方法进行缩放/平移.
> InkCanvas将图像设置为背景或子项.通过这种方法,通过ScaleTransform和TranslateTransform进行缩放/平移似乎是如此,但内存使用量可能在450-600 MB范围内.

这是我第一次尝试使用.NET / WPF进行图像处理,而且我对这个主题的了解非常有限.处理大图像的最佳实践是什么,尤其是WPF?我已经读到平铺图像(如深度缩放)可以提供帮助,但不确定如何做到这一点,或者在我的情况下这是最好的想法.你知道有哪些资源可以帮助我更好地理解这一点吗?

解决方法

通过“平铺”,如果您的意思是将图像分成单独的部分并且仅一次显示一个小的子集以提高性能,这将被称为“虚拟化”.

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

链接到这里:http://blogs.msdn.com/b/jgoldb/archive/2008/03/08/performant-virtualized-wpf-canvas.aspx

请注意,此博客包括缩放和缩放作为讨论的一部分,以及关于平滑滚动和先发制人加载磁贴的讨论,以获得最佳的UI响应.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐