我希望通过页面更改或滚动显示此图像时,将添加到FlowDocument的图像作为位图数据加载。(不是IsVisible属性)
因为我的senario是图像(png,jpg ...)在zip文件中。 我将zip文件加载到内存并将其解压缩到内存流。 所以,这个内存流有png,jpg二进制(低大小)。 我将此png二进制数据更改为BitmapImage类。 此bitmapImage类已添加到flowDocument。
问题是zip文件有很多图像文件,在我将图像更改为BitmapImage类后,它需要很多内存大小。
所以,我想把它改成下面。 1.将解压缩的图像(png,jpg ...)数据保存到MemoryStream。 2.添加此图像而不将其更改为BitmapClasses。 3.当图像应通过链接页面或滚动显示时,动态地将图像数据更改为BitmapClasses。 但是,我找不到上面第2号的方法。 我试过Display Image from Byte Array in WPF - Memory Issues,但情况不同。
如何在FlowDocument中显示图像时动态加载图像?
答案 0 :(得分:1)
您可以尝试这种方式。 1.扩展Image Class并添加IsVisibleChanged事件处理程序。 这个类有内存流变量。 3.添加图像时,只需添加除Source以外的内存流。 4.当调用IsVisibleChanged处理程序时,将内存流添加到源。
这是我的示例代码。
public class sampleImage : Image
{
public MemoryStream memoryStream = null;
public sampleImage () : base()
{
IsVisibleChanged += new DependencyPropertyChangedEventHandler(shandler);
}
void shandler(object sender, DependencyPropertyChangedEventArgs e)
{
if (IsVisible)
{
memoryStream.Position = 0;
var bitmap = BitmapFrame.Create(memoryStream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
Source = bitmap;
} else {
Source = null;
GC.Collect(); // it depends on you.
}
}
}