我是WIA的新手。并且我被要求使扫描服务扫描更快并且进行双面扫描。我当前的服务扫描一页,然后将其放入pdf中,依此类推,直到少于20页为止(此数字只是我之前使用的拐杖,如果有人退机如何获取“如果那里有纸”,将非常高兴。变量)。我开始在MSDN上进行挖掘并找到描述属性的文档,并在发现this帖子后描述了双面装钉,但其中设置了神秘的5个。找到this之后,弄清楚我需要WIA_DPS_DOCUMENT_HANDLING_SELECT设置为0x205(FEEDER + DUPLEX + AUTO_ADVANCE)。所以我试图像这样设置它们:
private static void SetProperty(Property property, int value)
{
IProperty x = (IProperty)property;
Object val = value;
x.set_Value(ref val);
}
...一些代码...
foreach (Property prop in device.Properties)
{
//LOGGER.Warn(prop.Name);
//LOGGER.Warn(prop.PropertyID);
switch ((Int32)prop.PropertyID)
{
// Document Handling Select
case 3088:
SetProperty(prop, 517);
break;
// Pages
case 3096:
SetProperty(prop, 1);
break;
}
}
而且它对我没有用...它只是停留在设置...可以有人解释如何设置AUTO_ADVANCE和DUPLEX道具吗?或者,也许“使扫描速度更快并进行双面扫描”需要的还不只是AUTO_ADVANCE和DUPLEX,我对它们的理解是错误的?还是我应该在扫描说明中考虑“ ISIS / TWAIN(Windows XP / Vista / 7/8 / 8.1 / 10)”字符串并使用其他库?(Windows 10,Canon DR-M160 ||,Windows的DR-M160和DR-M160II驱动程序)
这也是当前的提取功能:
public List<ImageFile> FetchImageList()
{
List<ImageFile> imageList = new List<ImageFile>();
//bool hasMorePages = true;
int testcount = 0;
while (testcount >= 0)
{
testcount--;
WIA.Device device = FindDevice(_deviceId);
if (device == null)
{
LOGGER.Warn("Scanner device not found");
return null;
}
// get item
WIA.Item scanItem = device.Items[1] as WIA.Item;
LOGGER.Debug($"ScanItem: {scanItem.ItemID}");
try
{
foreach (Property prop in device.Properties)
{
//LOGGER.Warn(prop.Name);
//LOGGER.Warn(prop.PropertyID);
switch ((Int32)prop.PropertyID)
{
// Document Handling Select
case 3088:
LOGGER.Warn("here");
SetProperty(prop, 517);
LOGGER.Warn("here");
break;
// Pages
case 3096:
SetProperty(prop, 1);
break;
}
}
// scan image
WIA.ICommonDialog wiaCommonDialog = new WIA.CommonDialog();
WIA.ImageFile image = (WIA.ImageFile)scanItem.Transfer(WIA.FormatID.wiaFormatPNG);
imageList.Add(image);
LOGGER.Warn("Front");
//get back side
image = (WIA.ImageFile)scanItem.Transfer(WIA.FormatID.wiaFormatPNG);
imageList.Add(image);
LOGGER.Warn("Back");
}
catch (Exception e)
{
throw (e);
}
}
return imageList;
}
嗯...我尝试在没有AUTO_ADVANCE的情况下进行双面扫描,并在转接呼叫中得到HRESULT:0x8000FFFF(E_UNEXPECTED)。根据this post(即使在Windows 7上也是如此),我想没有办法通过使用WIA为我解决此问题,仍然希望会有其他建议...
已解决的问题我使用saraff.twain,它对我有用:-git页面:https://github.com/saraff-9EB1047A4BEB4cef8506B29BA325BD5A/Saraff.Twain.NET带有炉排维基页面的优秀库。(还具有适用于.net 4.6.1的类似库)