我有一臺HP Scanjet 7000(雙面打印& ADF掃描儀)和一臺HP Scanjet 5500c(僅限ADF)以及一臺正在開發的掃描儀程序, WIA 2.0在Windows 7帶有自動文檔進紙器(ADF)的C#WIA只能在特定掃描儀上回退一頁
的問題是,在代碼完美的作品上了年紀的掃描儀型號,但較新的一個代碼似乎通過第一頁就好運行,則無法在第二。如果我遍歷下面一行代碼,
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;
}
在這個問題上的任何幫助將是非常非常感謝!我似乎無法在網上找到工作解決方案。只有沒有回答的論壇帖子來自同一問題的人。
我真的希望我能看到你的「HasMorePages(設備)」方法。我正在爲這件事而掙扎。 – JDPeckham