2010-03-10 25 views
25

Ich versuche, WIA (Microsoft Windows Image Acquisition Library v2.0) zu verwenden, um eine C# 3.5 WinForms App in VS2008 zu erstellen, die auf einem Vista-Rig ausgeführt wird, um Bilder von einem Scanner zu erfassen.Warum kann WIA meinen Scanner nicht sehen?

Ich weiß, dass es viele SDKs gibt, die dies tun (Accusoft, ByteScout, Knowledge Lake, etc), aber wir wollten etwas Kontrolle über die UI (oder das Fehlen von) und die Möglichkeit, die Verarbeitung und Handhabung der Bilder, weshalb wir den WIA-Winkel versuchen.

Ich konnte WIA jedoch nicht dazu bringen, meinen Scanner zu "sehen".

Die DLL "Microsoft Windows Image Acquisition Library v2.0" wurde im VS-Projekt referenziert, und ich habe "WIA verwenden" eingeschlossen. oben auf der Seite.

Hier ist der Abschnitt des Codes:

//Choose Scanner 
CommonDialogClass class1 = new CommonDialogClass(); 
Device d = class1.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false); 
if (d != null) 
{ 
    this.DeviceID = d.DeviceID; 
} 
else 
{ 
    //no scanner chosen 
    return; 
} 

Entspricht in Ordnung, aber Linie 2 (Vorrichtung D = ...) schlägt den folgenden Fehler bei der Ausführung:
Ausnahme von HRESULT: 0x80210015

Von dem, was ich sagen kann, bedeutet dies normalerweise, dass Ihr Gerät nicht angeschlossen/nicht eingeschaltet ist oder das Gerät nicht WIA-kompatibel ist.
Aber der fragliche Scanner erscheint in der Systemsteuerung/Scanner und Kameras (bedeutet, es ist WIA-kompatibel) und funktioniert, wenn über Photoshop zugegriffen wird (bedeutet, es ist eingeschaltet).

Ich habe andere Geräte (digitale Spiegelreflex) angeschlossen und der obige Code kann sie "sehen", so dass der Code funktioniert.

Hat jemand irgendwelche Vorschläge, was schief geht und wie man es beheben kann?

Update 1:
Ich habe ein paar verschiedene Scanner (Canon 5000F, Benq 5250C) versucht, aber gleiche Problem.

Update 2:
Ich habe nicht in der Lage gewesen definitiven Beweis dafür zu finden, aber ich denke, dass die Scanner Ich habe mit teste, oder vielleicht meist Scanner :(, ist nicht WIA kompatibel/. unterstützte ich jetzt bin auf der Suche in TWAIN verwenden, aber würde gerne noch von niemandem zu hören, die einen gewissen Erfolg mit WIA hatte

Update 3. Ended up WIA Notwasserung und eine .NET-Twain SDK (EZTwain). Alles jetzt sortiert. Danke an alle für ihre Eingabe.

+0

Treiberproblem? –

+0

@ Mitch. Ja, das habe ich überprüft. Ich hatte sichergestellt, dass es die aktuelle Version des Treibers hat. Und es funktioniert kein Problem in Photoshop. – Dhaust

+0

mögliche Duplikate von [Camera Capture mit WIA, C# und Win 7] (http://stackoverflow.com/questions/5830223/camera-capture-with-wia-c-sharp-and-win-7) –

Antwort

0

Werfen Sie einen Blick auf diesen Artikel auf CodeProject, der TWAIN abdeckt. Dies könnte Ihnen in dieser Richtung helfen, auch hier ist ein weiterer Artikel über WIA, obwohl es ein bisschen alt ist, aber einen Blick wert.

+0

Hallo Tommie, Ich habe diese beiden Seiten während meiner Recherchen gesehen (und mit dem Code von ihnen gespielt). Der Twain-Artikel stammt jedoch aus dem Jahr 2001 und erwähnt sogar WIA als einen moderneren Ansatz. Und der WIA-Artikel ist für WIA 1.0, der nur für XP ist, ich benutze die WIA 2.0, die für Vista/Win7 ist. Danke trotzdem. – Dhaust

0

würde ich versuchen, den folgenden Code, wenn nur der Scanner angeschlossen

IDeviceManager dm = ClassFactory.createDeviceManager(); 
System.out.println(dm.deviceInfos().count()); 

wenn der Gerätemanager der Scanner an allen

0
wiaImage = wiaDiag.ShowAcquireImage(WiaDeviceType.ScannerDeviceType, WiaImageIntent.GrayscaleIntent, WiaImageBias.MaximizeQuality, wiaFormatJPEG, true, true, false); 
WIA.Vector vector = wiaImage.FileData; 
FileExtention = wiaImage.FileExtension; 
Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData())); 
pbPreview1.Image = i;//to show preview of scanned image in picturebox 
0

sehen Dies ist meine Art und Weise WIA-Scanner zu testen:

private bool WIAScannerTest() 
{ 
     try 
     { 
      WIA.CommonDialog wiaObj = New WIA.CommonDialog(); 
      WIA.Device wiaDev = 
        wiaObj.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType, false, false); 
      return true; 
     } 
     catch (Exception ex) 
     {} 
     finally 
     { 
      if(wiaDev != null) 
      { 
       Marshal.ReleaseComObject(wiaDev) 
       wiaDev = null; 
      } 
      if(wiaObj != null) 
      { 
       Marshal.ReleaseComObject(wiaObj) 
       wiaObj = null; 
      } 
     } 
     return false; 
} 
0
ICommonDialog dialog = new CommonDialog(); 
Device device = dialog.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false); 

Als Alternative ativ.

0

Wahrscheinlich sind keine WIA-Treiber für die Geräte installiert. Ich würde vorschlagen, dass Sie stattdessen TWAIN verwenden sollten, das von fast allen Anbietern unterstützt wird.

Es gibt eine ganze Reihe von Open-Source- sowie kommerziellen TWAIN-Wrappern. Most of them work for 32bit applications and 64bit applications fail to access 32bit TWAIN drivers. Wenn Sie sowohl die 64bit- als auch die 32bit WinForms WPF-Anwendung unterstützen müssen, können Sie Aspire C# VB.NET scanning for twain wia scanner verwenden.

Verwandte Themen