2

我有一个应用程序,我在其中使用图像控件来显示大图像(~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;

一切正常,但是在视图模型上设置 Image 属性的时间与 Image 控件实际更新显示的时间之间存在显着延迟(对于大图像,大约需要 10 秒)。我已经完成了一些分析/日志记录,我知道这不是对 的调用RasterImageConverter.ConvertToSource(),而是它似乎是 Image 控件本身正在做的事情。

到目前为止,我一直无法找出导致这种延迟的原因。至少我希望能够在控件实际更新时得到通知,这样我就可以显示某种忙碌的通知,但似乎没有任何事件在正确的时间触发。

任何想法或帮助表示赞赏。

4

1 回答 1

1

在大多数计算机上显示 8000x8000 像素的图像需要 1 到 2 秒,但有一个问题。这样的图像最多使用 0.25 GB 的内存,并且由于 LEADTOOLS RasterImage 和 WPF BitmapSource 之间的转换,您通常需要两倍的可用 RAM。
这意味着除非您有大量可用的连续内存,否则您可以考虑将图像拆分为图块。或者如果您想显示整个内容,请考虑调整它的大小,因为没有监视器可以在不缩放的情况下显示整个内容。这部分类似于艾克在评论中的建议。

可以在此处找到显示类似图像的小型测试项目以及有关测试的一些详细信息:http: //support.leadtools.com/SupportPortal/CS/forums/45002/ShowPost.aspx

于 2015-11-20T02:35:49.717 回答