【发布时间】:2015-02-12 21:43:52
【问题描述】:
我有一台 Brother 多功能网络打印机/扫描仪/传真机(型号 MFC-9140CDN)。我正在尝试将以下代码与 WIA 一起使用,以检索使用文档进纸器扫描的项目:
const int FEEDER = 1;
var manager=new DeviceManager();
var deviceInfo=manager.DeviceInfos.Cast<DeviceInfo>().First();
var device=deviceInfo.Connect();
device.Properties["Pages"].set_Value(1);
device.Properties["Document Handling Select"].set_Value(1);
var morePages=true;
var counter=0;
while (morePages) {
counter++;
var item=device.Items[1];
item.Properties["Bits Per Pixel"].set_Value(1);
item.Properties["Horizontal Resolution"].set_Value(300);
item.Properties["Vertical Resolution"].set_Value(300);
var img=(WIA.ImageFile)item.Transfer();
var path=String.Format(@"C:\Users\user1\Documents\test_{0}.tiff",counter);
img.SaveFile(path);
var status=(int)device.Properties["Document Handling Status"].get_Value();
morePages = (status & FEEDER) > 0;
}
当第一次到达Transfer 方法时,所有页面都通过文档进纸器。第一个页面使用 img.SaveFile 保存到传入的路径,但所有后续页面都不可用 - device.Items.Count 为 1,尝试 device.Items[2] 会引发异常。
在下一次迭代中,调用 Transfer 会引发异常 - 可以理解,因为 feeder 中现在没有页面。
如何获取后续扫描到feeder的图片?
(注意,遍历所有设备属性,还有一个 ID 为 38922 的附加未命名属性。我无法找到对此属性的任何引用。)
更新
我在设备上找不到与WIA_IPS_SCAN_AHEAD 或WIA_DPS_SCAN_AHEAD_PAGES 对应的属性,但这是有道理的,因为根据文档,此属性是可选的。
我尝试使用 TWAIN(通过我强烈推荐的 NTwain 库)遇到同样的问题。
【问题讨论】:
-
纯猜测:TIFF 支持多页,第二页是否可以包含在单个文件中?也许用 Irfanview 看看。此外,如果这是 C#,通常 1 是 .Items[0] 而 2 是 .Items[1]。
-
@WhoIsRich (1) 附加页面不包含在 TIFF 文件中。这也是不可能的,因为在扫描仪完成扫描下一页之前,控制权会返回到下一行代码。 (2) 第一项是
Items[0]是.NET 约定,而不是C# 约定——在VB.NET 中我还必须写Dim l As New List(Of Integer): Dim firstInt = l(0)。出于某种原因,WIA 有第一项的替代约定是.Items[1]。