如何从C#增量地扫描Windows上的文档,同时获得回调以显示图像的片段,并更新我自己的自定义进度UI?
看起来扫描器API选项包括:
我对WIA脚本自动化的尝试:
我有一个简单的C#应用程序,它使用Windows脚本自动化扫描文档。但是,在扫描过程中,UI被弹出进度对话框劫持。
当前代码使用WIA脚本CommonDialog.showTransfer (请看这里)进行扫描,该脚本显示一个弹出进度栏对话框。我知道我可以使用Item.Transfer,但是它会在整个过程中阻塞,并且不提供回调,这样我就可以更新自己的自定义进度UI (或者取消传输)。
有什么方法可以用WIA进行非阻塞扫描,或者获得进度回调吗?
我一定要用吐温吗?
发布于 2017-06-02 16:18:51
看起来,在Windows上有两个非阻塞流扫描选项:
WIA COM
需要注意的是,WIA有一个高级的“脚本自动化”接口和一个低级的COM接口。使用底层的WIA提供了一种基于流的数据传输方法,使用IWiaTransfer和IWiaTransferCallback.
不幸的是,我可以找到的C# WIA包装器使用的是脚本自动化接口,它不提供流扫描接口。
Twain
吐温规格的第4-20页,名为缓冲内存模式传输,解释了如何使用固定大小的缓冲区来使用DAT_SETUPMEMXFER和DAT_IMAGEMEMXFER命令增量传输扫描数据。这仍然阻止每个增量内存缓冲区,但在每个缓冲区之后,它允许应用程序显示部分传入数据,并继续传输或取消数据。
我试过由twain.org提供的twain和twain,但是他们没有看到我的扫描仪。我还想避免不得不安装LGPL twaindsm.dll。
双子网包装器提供了一些Twain支持,它可以工作,并且不需要本机TwainDSM DLL。不幸的是,它还不支持缓冲内存传输。因此,我扩展了它。
我的双网扫描分支能够在图像像素到达时增量显示它们,就在本地UI中。但是,它仍然会阻塞每个增量传输块的UI线程。目前还不清楚这个阻塞是否可以移动到后台线程。
https://stackoverflow.com/questions/44320904
复制相似问题