我有一台HP Scanjet扫描7000(双面自动进稿器和扫描器)和HP Scanjet扫描550℃(仅ADF)和我正在开发一个扫描程序,它在Windows 7使用WIA 2.0。
问题是,在代码完美的作品上了年纪的扫描仪型号,但较新的一个代码似乎通过第一页跑就好了,再不行就第二。 如果我步骤通过围绕下面的行的代码;
image = (WIA.ImageFile)wiaCommonDialog.ShowTransfer(item, wiaFormatTIFF, false);
另一个呼叫旧扫描仪停止,等待在相同的制造,但较新的一个刚刚经历它的所有的网页在一个连续的操作从给料机运行。
我发现如果我使用Windows 7默认的扫描程序,较新的一个返回一个包含所有单独的页面一个.tif文件。 年长的一个返回单独.jpg文件(每个页面)。
这表明,我认为较新的扫描仪是通过其全送稿器扫描之前,它是准备回到那里上了年纪一个扫描每个页面之间返回一个图像的图像集合。
我怎样才能支持代码这种行为? 下面是上了年纪的扫描仪型号工程的相关代码的一部分:
public static List<Image> Scan(string scannerId)
{
List<Image> images = new List<Image>();
List<String> tmp_imageList = new List<String>();
bool hasMorePages = true;
bool useAdf = true;
bool duplex = false;
int pages = 0;
string fileName = null;
string fileName_duplex = null;
WIA.DeviceManager manager = null;
WIA.Device device = null;
WIA.DeviceInfo device_infoHolder = null;
WIA.Item item = null;
WIA.ICommonDialog wiaCommonDialog = null;
manager = new WIA.DeviceManager();
// select the correct scanner using the provided scannerId parameter
foreach (WIA.DeviceInfo info in manager.DeviceInfos)
{
if (info.DeviceID == scannerId)
{
// Find scanner to connect to
device_infoHolder = info;
break;
}
}
while (hasMorePages)
{
wiaCommonDialog = new WIA.CommonDialog();
// Connect to scanner
device = device_infoHolder.Connect();
if (device.Items[1] != null)
{
item = device.Items[1] as WIA.Item;
try
{
if ((useAdf) || (duplex))
SetupADF(device, duplex); //Sets the right properties in WIA
WIA.ImageFile image = null;
WIA.ImageFile image_duplex = null;
// scan image
image = (WIA.ImageFile)wiaCommonDialog.ShowTransfer(item, wiaFormatTIFF, false);
if (duplex)
{
image_duplex = (ImageFile)wiaCommonDialog.ShowTransfer(item, wiaFormatPNG, false);
}
// save (front) image to temp file
fileName = Path.GetTempFileName();
tmp_imageList.Add(fileName);
File.Delete(fileName);
image.SaveFile(fileName);
image = null;
// add file to images list
images.Add(Image.FromFile(fileName));
if (duplex)
{
fileName_duplex = Path.GetTempFileName();
tmp_imageList.Add(fileName_duplex);
File.Delete(fileName_duplex);
image_duplex.SaveFile(fileName_duplex);
image_duplex = null;
// add file_duplex to images list
images.Add(Image.FromFile(fileName_duplex));
}
if (useAdf || duplex)
{
hasMorePages = HasMorePages(device); //Returns true if the feeder has more pages
pages++;
}
}
catch (Exception exc)
{
throw exc;
}
finally
{
wiaCommonDialog = null;
manager = null;
item = null;
device = null;
}
}
}
device = null;
return images;
}
在这个问题上的任何帮助将是非常非常感谢! 我似乎无法在网上找到一个工作的解决方案。 从人同样的问题时只需解答论坛帖子。