jueves, 18 de octubre de 2012

Utilizar Scanner desde C# con WIA


Bueno, me di a la tarea de buscar como adquirir imágenes desde un Scanner por un requerimiento para realizar una aplicación para un cliente, después de mucho buscar y de ver varios ejemplos encontré como realizar lo  Windows Incluye desde XP una forma de hacerlo por medio de un SDK y desde Vista y 7 ya viene con el sistema operativo mas información en :http://msdn.microsoft.com/en-us/library/windows/desktop/ms630368(v=vs.85).aspx

Para no hacerles el cuento largo la forma de hacerlo o cuando menos la que yo ejecute compile y corrí desde Windows 7 con un miltifuncional Epson es la siguiente:

  1. Importar al proyecto las librerias "Microsoft Windows Image Acquisition Libray v2.0" (WIA) de la seccion COM.
  2. Después cree una clase como se muestra a continuación:
      1. using System;
      2. using WIA;
      3. public class Scanner
      4. {
      5.          Device oDevice;
      6.          CommonDialog dlg;
      7.          public Scanner()
      8.          {
      9.                   dlg = new CommonDialog();
      10.                   oDevice = dlg.ShowSelectDevice(WiaDeviceType.ScannerDeviceType, true, false);
      11.          }
      12.          public System.Drawing.Image Scann()
      13.          {
      14.                   ImageFile imageFile=dlg.ShowAcquireImage(oDevice.Type,        
      15.                            WiaImageIntent.GrayscaleIntent,
      16.                            WiaImageBias.MinimizeSize,
      17.                            "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}", false, false, false);
      18.                   WIA.Vector vector = imageFile.FileData;
      19.                   System.Drawing.Image i = System.Drawing.Image.FromStream(new
      20.                            System.IO.MemoryStream((byte[])vector.get_BinaryData()));
      21.                   return i;
      22.          }
      23. }
  3. Como se ve en el objetio principal es ShowAcquireImage() cuya descripcion esta completa se puede ver en: http://msdn.microsoft.com/en-us/library/windows/desktop/ms630772(v=vs.85).aspx, la cadena de caracteres extraños son los ID del tipo de codificacion de la Imagen los cuales se puede ver en la siguiente pagina:http://msdn.microsoft.com/en-us/library/windows/desktop/ms630810(v=vs.85).aspx
  4. Despues de la clase es muy sencillo solo se instancia el objeto y se llama la Funcion Scann() que es la que inicializa todo lo de la clase y regresa una elemento de tipo System.Drawing.Image 
      1. Scanner oScanner = new Scanner();
      2. pictureBox1.Image = oScanner.Scann();
Bueno se los dejo ya muy sencillo solo crear la clase y mandar llamar la funcion Scann(), espero que les sea util
Saludos...

6 comentarios:

  1. Julio César Sosa Yeladaqui14 de mayo de 2013, 19:27

    Excelente Amigo muchas gracias :D

    ResponderEliminar
    Respuestas
    1. buen dia, saludos, disculpa puedes tu pasarme este proyecto completo del escanner, seria de gran ayuda y te lo agradeceria mucho....mi coreo:velenyer_1000@outlook.es

      Eliminar
  2. Hey super amigo, Probado HP LaserJet 100 Color MFP M175a

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Veo que es un código muy sencillo de implementar. Lo voy a validar en mi proyecto y les cuento, muchas gracias.

    https://examplecodefree.blogspot.com/

    ResponderEliminar
  5. La verdad la clase me fue demasiado util. ERES GENIAL
    Muchas gracias

    ResponderEliminar