如何在FlowDocument中显示图像时动态加载图像?

时间:2016-10-27 08:34:37

标签: wpf image flowdocument

我希望通过页面更改或滚动显示此图像时,将添加到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中显示图像时动态加载图像?

1 个答案:

答案 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.
         }
     }
}