当图像在 FlowDocument 中可见时,如何动态加载图像?

How Can I load image dynamically when the image is visible at FlowDocument?

我希望添加到 FlowDocument 的图像在通过页面更改或滚动可见时作为位图数据加载。(不是 IsVisible 属性)

因为我的情况是图像(png、jpg...)在一个 zip 文件中。 我会将 zip 文件加载到内存并将其解压缩到内存流。 因此,此内存流具有 png、jpg 二进制文件(低尺寸)。 我将此 png 二进制数据更改为 BitmapImage class。 此位图图像 class 已添加到 flowDocument。

问题是 zip 文件有很多图像文件,在我将图像更改为 BitmapImage classes 后,它占用了很多内存。

所以,我想把它改成下面的样子。 1. 将解压后的图片(png、jpg...)数据保存到MemoryStream。 2. 添加此图像而不将其更改为 BitmapClasses。 3. 当图像应该通过链接页面或滚动显示时,将图像数据动态更改为 BitmapClasses。 但是,我找不到上面2号的方式。 我试过 Display Image from Byte Array in WPF - Memory Issues 但情况不同。

当图像在 FlowDocument 中可见时,如何动态加载图像?

你可以这样试试。 1. 扩展 Image Class 并添加 IsVisibleChanged 事件处理程序。 2. class 有内存流变量。 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.
         }
     }
}