【问题标题】:Document scanning on Windows C# with an incremental custom progress UI?在 Windows C# 上使用增量自定义进度 UI 进行文档扫描?
【发布时间】:2017-06-02 04:38:50
【问题描述】:

如何在 Windows 上从 C# 增量扫描文档,同时获取回调以在图像片段进入时显示它们,并更新我自己的自定义进度 UI?

看起来扫描仪 API 选项包括:

  • WIA、WIA 脚本自动化(Windows)
  • TWAIN(Windows、Linux)
  • ImageKit 和 ImageCaptureCore (MacOS)
  • 理智(Linux)
  • ISIS(windows,昂贵的商业)。

我对 WIA 脚本自动化的尝试:

我有一个简单的 C# 应用程序,它使用 Windows WIA 脚本自动化来扫描文档。 (参见code on github)但是,在扫描期间,UI 被弹出进度对话框劫持。

当前代码扫描使用 WIA 脚本CommonDialog.showTransfer (see here),它显示一个弹出进度条对话框。我知道我可以改用 Item.Transfer,但是,它会在整个持续时间内阻塞并且不提供回调,因此我可以更新自己的自定义进度 UI(或取消传输)。

有没有办法使用 WIA 进行非阻塞扫描,或获取进度回调?

我必须使用 TWAIN 吗?

【问题讨论】:

    标签: c# scanning twain wia twaindotnet


    【解决方案1】:

    Windows 上的非阻塞流式扫描似乎有两个选项:

    WIA COM

    需要注意的是,WIA 既有高级的“脚本自动化”接口,也有低级的 COM 接口。使用低级 WIA COM 提供了一种使用 IWiaTransfer 和IWiaTransferCallback 的基于流的数据传输方法。

    不幸的是,我能找到的 C# WIA 包装器使用的是脚本自动化接口,它不提供流式扫描接口。

    吐温

    Twain Specification 的第 4-20 页,标题为 Buffered Memory Mode Transfer,解释了如何使用固定大小的缓冲区通过命令 DAT_SETUPMEMXFER 和 @987654327 以增量方式传输扫描数据@。这仍然会阻塞每个增量内存缓冲区,但在每个缓冲区之后,它允许应用程序显示部分传入数据,并继续传输或取消它。

    我尝试了 twain.org 提供的 twain-cs 和 twain-dsm,但他们没有看到我的扫描仪。我还想避免必须安装 LGPL twaindsm.dll。

    twaindotnet 包装器提供了一些 Twain 支持,它可以工作并且不需要本机 TwainDSM DLL。不幸的是,它(还)不支持缓冲内存传输。因此,我对其进行了扩展。

    我的incremental_scanning branch of twaindotnet 能够在图像像素到达时增量显示它们,就在本机 UI 中。但是,它仍然会为每个增量传输块阻塞 UI 线程。目前尚不清楚这种阻塞是否可以移动到后台线程。

    youtube video of incremental scan progress

    【讨论】:

    • 您的项目如何设置增量预览?我将UseIncrementalMemoryXfer 设置为true,结果没有改变。
    • 您使用的是什么扫描仪?你指的是什么“结果”?这是您自己的应用程序,还是测试应用程序之一?
    • 更新:我正在使用 penpower card A8 扫描仪,我正在使用您的 WPF 测试应用程序。我将UseIncrementalMemoryXfer 设置为true。如果我选择默认 twain 设备,则生成的图像始终是黑白的,并且在扫描完成后仅触发一次 TransferImage 事件。如果我选择扫描仪的 WIA 模式,TransferImage 事件将逐步触发,但生成的图像中缺少蓝色。
    • twain 驱动程序控制它是否实现增量传输。 twaindotnet 始终使用 twain,因此当您选择 WIA 时,实际上是在选择扫描仪供应商提供的“twain via wia”驱动程序,该驱动程序在其 WIA 驱动程序之上实现了 twain 支持。我的猜测是,他们的“twain via wia”驱动程序支持 twain 增量传输,而他们的直接(传统)twain 驱动程序不支持。至于为什么 twain-via-wia 驱动不包含蓝色,要么是他们驱动的 bug,要么是 twain.net 的 bug。下载不同的免费扫描仪应用程序并进行测试。
    • 如果您需要更多调试帮助,可以在我的网络配置文件中找到我的电子邮件地址。给我发一封电子邮件。
    猜你喜欢
    • 1970-01-01
    • 2018-08-20
    • 2014-01-05
    • 2012-04-21
    • 2010-09-05
    • 2016-05-08
    • 2021-07-13
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多