2010-03-10 40 views
25

Estoy tratando de usar WIA (Microsoft Windows Image Acquisition Library v2.0) para compilar una aplicación WinForms de C# 3.5 en VS2008 que se ejecuta en una plataforma Vista para obtener imágenes de un escáner.¿Por qué WIA no puede ver mi escáner?

Sé que hay muchos SDK por ahí que hacen esto (Accusoft, ByteScout, Knowledge Lake, etc.) pero queríamos algo de control sobre la UI (o falta de) y la capacidad de personalizar el procesamiento y manejo del imágenes, por lo que estamos probando el ángulo de WIA.

Sin embargo, no he podido obtener WIA para 'ver' mi escáner.

Se ha hecho referencia al dll 'Microsoft Windows Image Acquisition Library v2.0' en el proyecto VS y he incluido 'using WIA;' en la parte superior de la página.

Aquí es la sección de código:

//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; 
} 

Cumple bien, pero la línea 2 (dispositivo D = ...) tira la siguiente error cuando ejecute:
excepción de HRESULT: 0x80210015

Por lo que puedo decir, esto generalmente significa que su dispositivo está desenchufado/no encendido o que el dispositivo no es compatible con WIA.
Pero el escáner en cuestión aparece en el Panel de control/Escáneres y cámaras (significa que es compatible con WIA) y funciona cuando se accede a través de Photoshop (significa que está encendido).

He enchufado otros dispositivos (SLR Digital) y el código anterior puede 'verlos', por lo que el código está funcionando.

¿Alguien tiene alguna sugerencia sobre qué está pasando y cómo solucionarlo?

Actualización 1:
he intentado un par de diferentes escáneres (Canon 5000F, Benq 5250C), pero mismo problema.

Actualización 2:
he podido encontrar pruebas definitivas de esta, pero estoy pensando que los escáneres que han estado probando con, o tal vez más escáneres :(, no son compatibles WIA/. apoyado estoy ahora estoy buscando en el uso de TWAIN, pero aun así encantaría saber de alguien que ha tenido cierto éxito con WIA

actualización 3:. Terminamos abandonando WIA y usando un SDK de .NET Twain (EZTwain). Todos ordenados ahora. Gracias a todos por su entrada.

+0

conductor? –

+0

@Mitch. Sí, revisé eso. Me aseguré de que tenga la versión actual del controlador. Y no funciona ningún problema en photoshop. – Dhaust

+0

posible duplicado de [Captura de cámara con WIA, C# y Win 7] (http://stackoverflow.com/questions/5830223/camera-capture-with-wiac-c-sharp-and-win-7) –

Respuesta

0

Eche un vistazo a este artículo en CodeProject que cubre TWAIN. Esto podría ayudarte en esa dirección, también, aquí hay otro artículo sobre WIA, a pesar de que es un poco viejo, pero vale la pena mirarlo.

+0

Hola Tommie, Había visto ambas páginas durante mi investigación sobre esto (y jugué con el código de ellas). Sin embargo, el artículo de Twain es de 2001 e incluso menciona WIA como un enfoque más moderno. Y el artículo de WIA es para WIA 1.0, que es solo para XP, estoy usando WIA 2.0, que es para Vista/Win7. Pero gracias de cualquier manera. – Dhaust

0

me gustaría probar el siguiente código cuando se conecta solamente el escáner

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

si el administrador de dispositivos puede ver su escáner en absoluto

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

Esta es mi manera de probar escáner WIA:

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); 

Como alternativa ative.

0

Es muy probable que no haya controladores WIA instalados para los dispositivos. Sugeriría que en su lugar utilizas TWAIN, que es compatible con casi todos los proveedores.

Hay un buen número de envoltorios TWAIN de código abierto y comercial. Most of them work for 32bit applications and 64bit applications fail to access 32bit TWAIN drivers. Si necesita admitir la aplicación WinForms WPF de 64 bits y 32 bits, puede considerar utilizar Asprise C# VB.NET scanning for twain wia scanner.

Cuestiones relacionadas