数据绑定WPF、多段Tiffs、内存流和性能

本文关键字:内存 性能 Tiffs WPF 多段 数据绑定 | 更新日期: 2023-09-27 18:20:31

我在WPF控件中有一个数据绑定对象,该对象正在"预览"多页tiff。

该对象具有公共PreviewImage和CurrentPreviewPage。

它有一个私有的PreviewPages,它是MemoryStream的集合(每个代表Tiff的一个页面)。

在获得预览图像(第一次)时,此代码运行:

if (PreviewPages.Count == 0)
{
    Image myImg = System.Drawing.Image.FromFile(_LocalFile);
    for (int i = 0; i < (NumberOfPages); i++)
    {
        myImg.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, i);
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        myImg.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
        PreviewPages.Add(ms);
    }
}

对于1100KB的17页TIFF,前面的代码大约需要10秒才能运行。必须有更好的方法来处理这个问题。之后,这被称为:

BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = 1000;
//bi.UriSource = new Uri(fiTemp.FullName);
bi.StreamSource = new System.IO.MemoryStream(PreviewPages[CurrentPreviewPage - 1].ToArray());
bi.EndInit();
_PreviewImage = bi;

现在,在初始化之后,这段代码工作得非常好(它可以像拖动绑定滑块一样快速地更改页面)。任何帮助都将不胜感激。

数据绑定WPF、多段Tiffs、内存流和性能

在主线程上加载第一个页面,然后在后台加载其他页面-请参阅BackGroundWorker。只有主线程可以访问UI。在BackGroundWorker上,您需要决定是一次获得2-x一个页面,还是一次获得所有页面。在您将第2页带到UI线程之前,用户无法访问第2页。我会执行取消。如果用户放弃,你不想占用CPU。