Usando el Scanner desde C#

Para un sistema que estoy haciendo, necesitaba scannear documentos y guardarlos en una BD (la ruta). Pero no tenía ni idea de cómo hacerlo … Hasta que llegué a la solución aquí😀

Entonces, lo primero es agregar la referencia a WIA (Windows Image Acquisition) a nuestro proyecto Captura

Ahora, agregamos una nueva ventana que tenga un ListBox, un Image y un Button.

En el evento OnLoad de la ventana, metemos todos scanners que tengamos linkeados al equipo. Esto lo hacemos así:

Devices.Items.Clear();
var deviceManager = new DeviceManager();
for (int i = 1; i <= deviceManager.DeviceInfos.Count; i++)
{
    if (deviceManager.DeviceInfos[i].Type != WiaDeviceType.ScannerDeviceType)
    {
        return;
    }
    Devices.Items.Add(new Scanner(deviceManager.DeviceInfos[i]));
}

Suponiendo que el ListBox se llama Devices. Como ven, necesitamos de la clase Scanner:

using WIA;

namespace Consulado
{
    public class Scanner
    {
        private readonly DeviceInfo _deviceInfo;

        public Scanner(DeviceInfo deviceInfo)
        {
            this._deviceInfo = deviceInfo;
        }

        public ImageFile Scan()
        {
            var device = this._deviceInfo.Connect();
            var item = device.Items[1];
            var imageFile = (ImageFile)item.Transfer("{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}");
            return imageFile;
        }

        public override string ToString()
        {
            return this._deviceInfo.Properties["Name"].get_Value().ToString();
        }
    }
}

Ahora que tenemos todo, al botón para scannear:

var device = Devices.SelectedItem as Scanner;
if (device == null)
{
    MessageBox.Show("Please select a device.", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
    return;
}
var image = device.Scan();
var path = @"c:\scan.jpeg";
if (File.Exists(path))
{
    File.Delete(path);
}
try
{
    image.SaveFile(path);
    BitmapImage BImage = new BitmapImage(new Uri(path, UriKind.Absolute));
    img.Source = BImage;
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
} 

Y listo ! La imagen se guarda en la raíz y mostramos la imagen en el imageBox🙂

Acerca de MaritoCares

Ingeniero Informático. Con tendencias a la programación en [C#, VB].NET, Java(Web principalmente...), PHP, JavaScript, algo mínimo de [ruby, python], y el clásico C.
Esta entrada fue publicada en Aplicación, C#, Tutoriales. Guarda el enlace permanente.

7 respuestas a Usando el Scanner desde C#

  1. Ricardo dijo:

    MaritoCares
    Probaste para que funcione con un alimentador de documentos (ADF), si la tuvieras podrías compartila.

  2. Juan dijo:

    creo que la solucion al problema que comentas esta en esta pagina

    http://www.techques.com/question/1-8966/Using-C

  3. Anónimo dijo:

    Como se puede implementar un contador de hojas scanedas

  4. Edmundo dijo:

    Tengo un problema y es que al digitalizar una imagen tamaño carta no se digitaliza por completo sino un pedazo de imagen, tengo una scanner canon mx310. no se que hacer, espero ayuda de quien sea ..

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s