c# .net .net-3.5 wia image-scanner

Usando la versión 2.0 de C#/ WIA en Vista para escanear



.net .net-3.5 (5)

Quiero implementar un sistema de archivo sin papel y estaba buscando usar WIA con C # para la adquisición de imágenes. Hay bastantes proyectos de muestra en CodeProject, etc. Sin embargo, después de descargar cada uno de ellos que puedo encontrar, me he encontrado con un problema.

En todos y cada uno de ellos, la referencia a WIALib está rota. Cuando voy a agregar "Microsoft Windows Image Acquisition" como referencia, la única versión disponible en mi estación de trabajo de desarrollo (también la máquina que ejecutará esto) es 2.0.

Desafortunadamente, todos y cada uno de estos proyectos de muestra parecen haber sido codificados contra 1.x. La referencia entra como "WIA" en lugar de "WIALib". Hice una toma, simplemente cambiando la importación del espacio de nombres, pero claramente la API es drásticamente diferente.

¿Hay alguna información sobre la implementación de v2.0 o sobre la actualización de uno de estos proyectos de muestra existentes?


No necesita ser WIA. Estaba mirando principalmente la configuración de WIA porque ofrece la misma interfaz básica para diferentes escáneres. Tengo 3 escáneres en esta máquina y los controladores / software TWAIN para todos son malos (como bloquear la pantalla durante el escaneo).

Para la gestión de documentos, realmente estoy buscando escaneos simples en escala de grises de 200 ppp, por lo que la mayoría de las cosas en los controladores TWAIN son excesivas.

Dicho esto, preguntar aquí fue parte de mi último intento de averiguar cómo hacerlo en WIA antes de pasar a TWAIN.


Para acceder a WIA, deberá agregar una referencia a la biblioteca COM, "Biblioteca de adquisición de imágenes de Microsoft Windows v2.0" (wiaaut.dll). agregue un "uso de WIA";

const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; CommonDialogClass wiaDiag = new CommonDialogClass(); WIA.ImageFile wiaImage = null; wiaImage = wiaDiag.ShowAcquireImage( WiaDeviceType.UnspecifiedDeviceType, WiaImageIntent.GrayscaleIntent, WiaImageBias.MaximizeQuality, wiaFormatJPEG, true, true, false); WIA.Vector vector = wiaImage.FileData;

(System.Drawing)

Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData())); i.Save(filename)

Esa es una forma básica, funciona con mi alimentador de cama plana / doc. Sin embargo, si necesita más de un documento / página a la vez, probablemente haya una mejor manera de hacerlo (por lo que pude ver, esto solo maneja una imagen a la vez, aunque no estoy del todo seguro). Si bien es un documento de WIA v1, el artículo de Scott Hanselman Coding4Fun sobre WIA contiene más información sobre cómo hacerlo para varias páginas, creo (todavía tengo que ir más allá de eso)

Si se trata de un sistema de oficina sin papel, es conveniente que también consulte MODI (Office Document Imaging) para hacer todo el OCR por usted.


Otra nota: debe descargar el archivo WIA 2.0 dll de Microsoft.com y luego buscar el dll y agregarlo a su proyecto.


Actualización : estoy agregando esto por separado ya que es una respuesta diferente (un año más tarde). Aprendí que XP tiene WIA 1.0 y Vista en adelante tiene WIA2.0. Sin embargo, puede instalar WIA 2.0 para Windows XP Sp1 + desde aquí .

Luego también hice una pequeña biblioteca con el código que encontré en algún lugar en el interweb aquí, también tiene la capacidad de escanear varias páginas: http://adfwia.codeplex.com/