2008-08-12 9 views
21

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.Uso de C#/WIA versión 2.0 en Vista para escanear

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 haberse codificado en 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?

+0

Una pregunta rápida. ¿Necesitas absolutamente WIA? ¿O puedes salir con Twain? Si Twain está bien, podría tener algún código para donar. –

Respuesta

21

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). agrega un "usando 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) 

Ésta es una forma básica, trabaja con mi alimentador de superficie 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 Coding4Fun article on WIA de Scott Hanselman contiene más información sobre cómo hacerlo para varias páginas, creo (todavía tengo que ir más allá)

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

+0

Le daré una oportunidad. No me estoy metiendo con OCR porque no he visto ninguno de los sistemas llegar lo suficientemente cerca de mis cosas para ser más útil que simplemente hacer algunos metadatos decentes y etiquetado Esto debería darme la mayoría de lo que necesito como una vez está referenciado, puedo buscar en la API. –

+5

En lugar de ese GUID mágico puedes usar System.Drawing.Imaging.ImageFormat.Jpeg.Guid.ToString ("B"). – Lars

+5

O puedes usar el guid definido en Interop.WIA .dll. FormatID.wiaFormatJPEG –

0

No es necesita para 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 exageradas.

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

0

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

1

actualización: estoy añadiendo esto por separado ya que es una respuesta diferente (un año después). 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 here.

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

Cuestiones relacionadas