加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:17:18 所属栏目:百科 来源:网络整理
导读:我目前正在开发一个应用程序,需要显示大型工程图纸,可以是8800×6800或更大.要求声明用户应该能够平移和缩放图像.理想情况下,他们也希望能够对图像进行注释.如果您查看 Windows Photo Viewer,您将看到我想要模拟的性能和功能,减去注释部分. 到目前为止,我已
我目前正在开发一个应用程序,需要显示大型工程图纸,可以是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响应.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读