【发布时间】:2019-10-22 13:15:41
【问题描述】:
我是 WIA 的新手。我被要求使扫描服务扫描更快和双面。我当前的服务扫描一页,然后将其放入 pdf 等直到少于 20 页(这个数字只是我之前使用的拐杖,如果有人解释如何获得“如果那里有任何文件”,我会很高兴多变的)。我开始在 MSDN 上挖掘并找到描述属性的文档,并在找到描述双工 sanning 的 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)”字符串并使用其他库?
(Window 10、Canon DR-M160||、DR-M160 & DR-M160II Windows 驱动程序)
这里也是当前的 fetch 函数:
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;
}
【问题讨论】:
-
“值不在预期范围内”...抱歉含糊不清,对于 c# 我也是新手(