У меня есть объект с привязкой к данным в элементе управления WPF, который «просматривает» размолвку.
Объект имеет открытый PreviewImage и CurrentPreviewPage.
Он имеет приватные PreviewPages, которые представляют собой набор MemoryStreams (каждый представляет страницу Tiff).
После получения PreviewImage (в первый раз) этот код запускается:
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);
}
}
Предыдущий код занимает около 10 секунд для 17-страничного TIFF размером 1100 КБ. Должен быть лучший способ справиться с этим.
После этого это называется:
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;
Теперь, после инициализации этот код работает фантастически (он может менять страницы так же быстро, как вы можете перетащить связанный ползунок). Любая помощь будет высоко ценится.