我有一个应用程序,我使用Image控件来显示一个大图像(~8000x8000像素)。我将图像控件绑定到ImageSource,如下所示:
<Image x:Name="_ImageSource" Source="{Binding ViewModel.Image, Mode=OneWay}" RenderOptions.BitmapScalingMode="Linear"/>
我使用Leadtools图像库来创建ImageSource,这是一个WritableBitmap。
this.Image = RasterImageConverter.ConvertToSource(displayImage, ConvertToSourceOptions.None) as BitmapSource;
一切正常,但是在viewmodel上设置Image属性的时间与Image控件实际更新显示的时间之间存在显着延迟(对于大图像,大约为10秒)。我已经完成了一些分析/日志记录,我知道这不是对RasterImageConverter.ConvertToSource()
的调用,而是它似乎是Image控件本身正在做的事情。
到目前为止,我一直无法了解可能造成这种延迟的原因。至少我希望能够在控件实际更新时收到通知,这样我就可以显示某种繁忙的通知,但似乎没有任何事件在正确的时间触发。
感谢任何想法或帮助。
答案 0 :(得分:1)
在大多数计算机上显示8000x8000像素的图像需要1到2秒,但是有一个问题。这样的图像使用高达0.25千兆字节的内存,由于LEADTOOLS RasterImage和WPF BitmapSource之间的转换,您通常需要两倍的可用RAM。 这意味着除非你有足够的免费连续内存,否则你可以考虑将图像分割成图块。或者考虑重新调整它,如果你想显示整个事物,因为没有监视器可以显示整个事情而无需缩放。部分内容类似于Ike在评论中提出的建议。
可以在此处找到显示类似图像的小型测试项目以及有关测试的一些详细信息: http://support.leadtools.com/SupportPortal/CS/forums/45002/ShowPost.aspx