0

我需要编写自己的 pdf 查看器(UserControl)。我为此使用 pdfium.dll。它的包装是 PdfiumService。此服务可以将页面呈现到 BitmapSource。PdfViewer 在 ScrollViewer 中的 VirtualizingStackPanel 中显示页面。任何想法如何为 pdf 进行延迟渲染?问题是如果 pdf 大约 20mb(1000 页),渲染页面需要大约 2gb 内存。

VirtualizingStackPanel 可以帮助我吗?我没有找到“BeginVirtualizing”或其他任何事件。有什么简单的方法可以知道现在正在显示什么项目?

也许是这样的:

  1. 计算一次可以显示多少页。
  2. 请参阅 ScrollViewer 的偏移量。
  3. 计算页面的索引现在显示。
  4. 在当前旁边渲染 5 页。

是否有任何现成的解决方案,或一些提示或想法?

4

1 回答 1

0

好吧,我对书籍中的图像有一点点……问题不在于您放置位图的gui,而是您如何从库中获取图像……是一个接一个,顺序还是随机?

事实上,如果你使用 VirtualizingStackPanel 它只会管理 gui 元素的创建或销毁,但如果你在内存中有完整的位图集合,你就死定了。

一种方法是在位图之外创建 Page 对象,并在需要时创建图像 + 添加一个计时器以清除所有“最旧的图像”

我在CBR中做了类似的事情;我使用自定义控件来显示页面

private BitmapImage _Image = null;
    /// <summary>
    /// the image 
    /// </summary>
    public BitmapImage Image
    {
        get
        {
            if (_Image == null)
                _Image = (DocumentFactory.Instance.GetService(Parent) as BookService).GetImageFromStream(Parent.FilePath, FilePath);

            ImageLastAcces = DateTime.Now;
            return _Image;
        }
        set { _Image = value; }
    }
于 2017-05-30T15:12:18.877 回答