scanner sacar programa poner perfiles impresora icono escaner escanear directo digitalizacion desde crear configurar como acceso c# winforms wia image-scanner

c# - sacar - programa de escaner windows 7



¿Por qué WIA no puede ver mi escáner? (7)

Creo que su escáner no es compatible con WIA . Recomiendo usar TWAIN que es compatible con la mayoría de los proveedores.

Recomiendo usar la biblioteca NTWAIN :

Nuget Pakcage: https://www.nuget.org/packages/NTwain/

Código fuente: https://bitbucket.org/soukoku/ntwain

Estoy tratando de usar WIA (Biblioteca de adquisición de imágenes de Microsoft Windows v2.0) para crear una aplicación WinForms C # 3.5 en VS2008 que se ejecuta en una plataforma Vista para adquirir imágenes desde un escáner.

Sé que hay muchos SDK que hacen esto (Accusoft, ByteScout, Knowledge Lake, etc.) pero queríamos cierto control sobre la interfaz de usuario (o falta de) y la capacidad de personalizar el procesamiento y manejo de las imágenes, que es Por eso estamos intentando el ángulo WIA.

Sin embargo, no he podido hacer que WIA "vea" mi escáner.

El dll ''Biblioteca de adquisición de imágenes de Microsoft Windows v2.0'' ha sido referenciado en el proyecto VS y he incluido ''usar WIA;'' en la parte superior de la página.

Aquí está 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 = ... ) genera el siguiente error cuando se ejecuta:
Excepción de HRESULT: 0x80210015

Por lo que puedo decir, esto generalmente significa que su dispositivo está desconectado o no está 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 conectado 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á mal y cómo solucionarlo?

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

Actualización 2 :
No he podido encontrar una prueba definitiva de esto, pero estoy pensando que los escáneres con los que he estado probando, o quizás la mayoría de los escáneres :(, no son compatibles / compatibles con WIA. Ahora estoy buscando el uso de TWAIN, pero todavía me encantaría saber de alguien que haya tenido algún éxito con WIA.

Actualización 3 : Terminé deshaciéndome de WIA y usando un .NET Twain SDK (EZTwain). Todo resuelto ahora. Gracias a todos por su aporte.


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


Esta es mi manera de probar el 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; }


Lo más probable es que no haya controladores WIA instalados para los dispositivos. Le sugiero que utilice TWAIN, que es compatible con casi todos los proveedores.

Hay bastantes fuentes de código abierto así como comercialmente envoltorios TWAIN. La mayoría de ellos funcionan para aplicaciones de 32 bits y las aplicaciones de 64 bits no pueden acceder a los controladores TWAIN de 32 bits . Si necesita ser compatible con la aplicación WPF de 64 bits y 32 bits de WinForms, puede considerar utilizar el escaneo Asprise C # VB.NET para el escáner wia Twain .


Probaría el siguiente código cuando conecte solo su escáner

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

Si el administrador de dispositivos puede ver su escáner


ICommonDialog dialog = new CommonDialog(); Device device = dialog.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false);

Como alternativa.


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