Utilisation WIA

Signaler
Messages postés
1
Date d'inscription
lundi 3 octobre 2016
Statut
Membre
Dernière intervention
3 octobre 2016
-
Bonjour,
Je suis novice en visual studio et je voudrai scanner des documents en automatique .
Je rencontre un problème lors de l'utilisation de WIA.transfer
J'ai mis en référence WIA + propriété incorporer les types d'interop = Faux
J'ai testé deux méthodes :
showTransfer qui marche tres bien mais affiche une fenetre de sélection des paramètres
ou transfer qui plante avec l'erreur 'la valeur n'est pas comprise dans la plage attendue'
Merci pour votre aide
Vivie

using System.Runtime.InteropServices;
using WIA;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
...
//Premiere methode qui marche mais qui affiche une fenetre de saisie des paramètres
        public static void Scanner_Documents(string Path, ref Int16 MsgId, ref string MsgLib)
        {
            
            var numero_document = 1;
            MsgId = 0;
            MsgLib="";

            try
            {
                // Create a DeviceManager instance
                var deviceManager = new DeviceManager();

                List<Image> ret = new List<Image>();

                WIA.CommonDialog dialog = new WIA.CommonDialog();
                WIA.Device device = dialog.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType);
                WIA.Items items = dialog.ShowSelectItems(device);


                WIA.Item item = device.Items[1] as WIA.Item;
                    while (true)
                    {
                        try
                        {

                            WIA.ImageFile image = (WIA.ImageFile)dialog.ShowTransfer(item); 
                            if (image != null && image.FileData != null)
                            {

                                dynamic binaryData = image.FileData.get_BinaryData();
                                if (binaryData is byte[])
                                    using (MemoryStream stream = new MemoryStream(binaryData))
                                    using (Bitmap bitmap = (Bitmap)Bitmap.FromStream(stream))
                                    {
                                        File.Delete(Path+@"\DocScan" + numero_document.ToString() + ".jpg");
                                        bitmap.Save(Path+@"\DocScan" + numero_document.ToString() + ".jpg", ImageFormat.Jpeg);
                                        
                                        numero_document++;
                                    }
                            }
                        }
                        catch
                        {
                            break;
                        }
                    }

                
            }
            catch (Exception ex)
            {
                MsgId = 1;
                MsgLib = ex.Message;
                return;
            }
        }

//Seconde methode que je souhaite utiliser et qui ne marche pas
        public static void Scanner_Documents_Bis(string Path, ref Int16 MsgId, ref string MsgLib)
        {

           CommonDialogClass commonDialogClass = new CommonDialogClass();

            WIA.CommonDialog dialog = new WIA.CommonDialog();
            WIA.Device scanner;

            dialog = new CommonDialog();
            scanner = dialog.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType, false, false);

            try 
            {

                ImageFile image = (ImageFile)scanner.Items[1].Transfer(FormatID.wiaFormatBMP);
   //La commande .transfer déclenche le catch exception : la valeur n'est pas comprise dans la plage attendue
                System.IO.File.Delete(@"c:\compta\scan\tmp.png");
                image.SaveFile(@"c:\compta\scan\tmp.png");
            }

            catch (Exception ex)
            {
  // ==> ERREUR la valeur n'est pas comprise dans la plage attendue

                return;
            }

        }



EDIT : Ajout des balises de code