2015-06-09 69 views
2

由于Vista,Windows随附WIA 2.0(wiaaut.dll)。 根据以下知识库文章以及我在各种论坛上的许多调查结果,使用WIA 2.0不再可能进行双面扫描。然而,该文章提到使用原生WIA 2.0,什么可以使双面扫描成为可能。 (https://support.microsoft.com/en-us/kb/2709992WIA 2.0双面扫描

按照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.

+0

如果可能,我建议您使用[TWAIN协议](twain.org)代替。与WIA相比,TWAIN为成像设备提供更多定制选项和高级控制。 了解更多关于[在.NET应用程序中使用TWAIN](http://www.dynamsoft.com/blog/document-imaging/using-twain-in-net-applications/) – Rachel

回答

4

几个小时的搜索后,我发现在以下职位的线索。 https://stackoverflow.com/a/7580686/3641369

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

设置wiaDev.Properties [“文档处理选择”] = 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); 

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

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

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

希望这可以帮助别人!

+0

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