处理用 PdfPig 提取的图像

问题描述

使用 PdfPig 提取的图像是 XObject Image 或 InlineImage 类型(均继承自 IPdfImage)。我想在一个简单的 WPF 应用程序中保存和显示它们。为此,我需要以更易于访问的形式使用它们,例如 BitmapImage 格式。实现这一目标的正确方法是什么?图书馆文档在这里没有帮助,我悲惨的尝试没有成功。

解决方法

我还没有测试过任何这些,但如果它不起作用,它至少应该让你走上正确的道路。

查看 GitHub 上的 PdfPig 源代码,我可以看到 XObjectImageInlineImage 都有一个函数 TryGetPng。从它的外观来看,我认为这个字节数组将与普通 PNG 文件的内容匹配,这意味着您应该能够将它直接加载到 BitmapImage 中。

this answer 获取一些代码。像这样的事情可能会奏效:

InlineImage pdfImage;
byte[] png;

if (pdfImage.TryGetPng(out png))
{
    var bitmap = (BitmapSource)new ImageSourceConverter().ConvertFrom(png);
}

注意:这两个类还有一个 TryGetBytes 方法,它可以代替 TryGetPng。我只是不确定 TryGetBytes 的输出格式是什么,所以我对 TryGetPng 更有信心。不过,如果一个不起作用,我会同时尝试。

,

FWIW,通过反复试验,我目前的方法是从 The following StateError was thrown building StreamBuilder<DocumentSnapshot<Object?>>(dirty,state: _StreamBuilderBaseState<DocumentSnapshot<Object?>,AsyncSnapshot<DocumentSnapshot<Object?>>>#4c964): Bad state: cannot get a field on a DocumentSnapshotPlatform which does not exist The relevant error-causing widget was StreamBuilder<DocumentSnapshot<Object?>> package:iparts_user/widgets/orders_widget.dart:18 When the exception was thrown,this was the stack #0 DocumentSnapshotPlatform.get package:cloud_firestore_platform_interface/…/platform_interface/platform_interface_document_snapshot.dart:76 #1 _JsonDocumentSnapshot.get package:cloud_firestore/src/document_snapshot.dart:92 #2 _JsonDocumentSnapshot.[] package:cloud_firestore/src/document_snapshot.dart:96 #3 OrderWidget.build.<anonymous closure> package:iparts_user/widgets/orders_widget.dart:39 #4 StreamBuilder.build package:flutter/…/widgets/async.dart:545 ... 开始,如果失败则回退到 TryGetPng。然后我将提取的字节解释为 RawBytes。我根本不使用 System.Drawing.Image。这是我的代码(F#,但应该很容易转换为 C#):

TryGetBytes