WIA 2.0 双面扫描

Posted

技术标签:

【中文标题】WIA 2.0 双面扫描【英文标题】:WIA 2.0 Duplex scanning 【发布时间】:2015-08-24 23:17:17 【问题描述】:

从 Vista 开始,Windows 附带 WIA 2.0 (wiaaut.dll)。 根据以下知识库文章和我在各个论坛上的许多发现,使用 WIA 2.0 不再可能进行双面扫描。然而,文章提到了使用原生 WIA 2.0,这将使双面扫描成为可能。 (https://support.microsoft.com/en-us/kb/2709992)

根据 WIA 2.0 文档 (https://msdn.microsoft.com/en-us/library/windows/desktop/ms630196(v=vs.85).aspx),可以使用新的 WIA_IPS_DOCUMENT_HANDLING_SELECT (3088) 属性进行双面扫描。

我的问题是:

我不知道如何使用本机 WIA,我怀疑在使用 C# 时这是不可能的。 我找不到设置新 WIA_IPS_DOCUMENT_HANDLING_SELECT 属性的方法,因为我的 wiaDevice 属性中不存在该属性。根据 WiaDef.h,它的属性 id 仍然是 3088,唯一可能的值是 0x400 (1024)。

如果有人可以帮助我(我想还有很多其他人),将不胜感激!

您好,

M.

【问题讨论】:

如果可能,我建议您使用 [TWAIN 协议](twain.org)。与 WIA 相比,TWAIN 提供了更多的自定义选项和对成像设备的高级控制。在using TWAIN in .NET Applications了解更多信息 【参考方案1】:

经过几个小时的搜索,我在以下帖子中找到了线索。 https://***.com/a/7580686/3641369

由于我使用的是一次性双面扫描仪,因此可以同时扫描正面和背面。通过设置设备属性(设备属性,不是item属性)Document_Handling_Select为5(Feeder + Duplex)和Pages为1,调用传输方法2次,终于得到了扫描的字体和背面。

设置 wiaDev.Properties["Document Handling Select"] = 5 指定使用进纸器和扫描双面。

设置 wiaDev.Properties["Pages"] = 1 指定扫描仪应在内存中保留 1 页,这允许在 1 次扫描期间将页面的正面和背面都保留在内存中。

if (duplex)

     wiaDev.Properties["Document Handling Select"].set_Value(5);
     wiaDev.Properties["Pages"].set_Value(1);
 

获取 Wia 项目并设置项目属性,例如颜色和 dpi。

var item = wiaDev.Items[1];
item.Properties["6146"].set_Value((int)clr);
item.Properties["6147"].set_Value(dpi);
item.Properties["6148"].set_Value(dpi);

然后调用 transfer 方法两次返回两个不同的图像

var img = (ImageFile)wiaCommonDialog.ShowTransfer(item, FormatID.wiaFormatJPEG);

ImageFile imgduplex = null;
if(duplex)
   imgduplex = (ImageFile)wiaCommonDialog.ShowTransfer(item, FormatID.wiaFormatJPEG);

希望这对某人有所帮助!

【讨论】:

请问您是如何确定 Feeder 和 Duplex 的值的?当我尝试将文档处理选择设置为 1 以外的任何值时,它无法设置该属性,但我知道此扫描仪可以在其他程序中进行双面单程扫描。当我将其设置为 5 时,我得到“值不在预期范围内”。我将页面设置为 1。

以上是关于WIA 2.0 双面扫描的主要内容,如果未能解决你的问题,请参考以下文章

使用文档进纸器的 WIA 双面扫描

在 WIA 2.0 中扫描时设置页面大小

使用 WIA 2.0 和 C# 扫描多页时跳过的页面

带有自动文档进纸器 (ADF) 的 C# WIA 在某些扫描仪上仅重新调整一页

WIA 2.0 HP ScanJet 7650 特定问题

通过 WIA 扫描通知