Проблема с передаточной функцией в WIA C#

У меня проблема с кодом ниже. Я хочу отсканировать документ, нажав кнопку в приложении WinForms С#.

Я использую WIA, Visual Studio и сканер Fujitsu N7100A, работающий с Windows 8. Я следую онлайн-руководству по использованию WIA.

Но программа работает не так, как ожидалось. Кажется, он ломается при методе передачи.

            // Create a DeviceManager instance 
            var deviceManager = new DeviceManager();
            // Create an empty variable to store the scanner instance
            DeviceInfo firstScannerAvailable = null;
            // Loop through the list of devices to choose the first available 
            AddLogs(deviceManager.DeviceInfos.Count.ToString(), filename);
            foreach (DeviceInfo d in deviceManager.DeviceInfos)
            {
                if (d.Type == WiaDeviceType.ScannerDeviceType)
                {
                    firstScannerAvailable = d;
                }
            }
            // Connect to the first available scanner 
            var device = firstScannerAvailable.Connect();
            // Select the scanner 
            var scannerItem = device.Items[0];
            // Retrieve a image in JPEG format and store it into a variable 
            var imageFile = (ImageFile)scannerItem.Transfer(FormatID.wiaFormatPNG);
            //Save the image in some path with filename 
            var path = @"C:\Documents\scan.png";
            if (File.Exists(path))
            {
                File.Delete(path);
            }
            // Save image ! 
            imageFile.SaveFile(path);

Мне просто нужно убрать добавление строк в файл лога.


person Léna Yenshua    schedule 23.04.2018    source источник
comment
Когда я запускаю приложение, оно дает мне исключение, которое говорит, что значение не содержится в ожидаемом месте.   -  person Léna Yenshua    schedule 24.04.2018


Ответы (3)


Это скорее обходной путь, так как я понятия не имею о вашем сканере.

Я бы предположил, что у всех сканеров есть диск, на котором они хранят свои отсканированные документы, такие как мой. Поэтому я бы посоветовал вам прочитать все доступные диски, пройти через них, проверить DriveType и VolumeLabel, а затем прочитать его файлы и скопировать документ, где вы хотите

Что-то вроде этого :

foreach (var item in DriveInfo.GetDrives())
        {
            //VolumeLabel differs from a scanner to another
            if (item.VolumeLabel == "Photo scan" && item.DriveType == DriveType.Removable)
            {
                foreach (var obj in Directory.GetFiles(item.Name))
                {
                    File.Copy(obj, "[YOUR NEW PATH]");
                    break;
                }
                break;
            }
        }
person Zohir Salak    schedule 23.04.2018
comment
Спасибо за ваш ответ. Моя основная проблема: сканер вообще ничего не сканирует на данный момент. Он вообще не начинает работать. И я не знаю, почему. Насколько я понимаю, ваш код должен быть размещен после процесса сканирования, верно? - person Léna Yenshua; 24.04.2018
comment
Если он вообще не работает, я бы предположил, что он сломан, или, может быть, вашему сканеру нужен драйвер? - person Zohir Salak; 24.04.2018
comment
Сканер даже работает с другим приложением. - person Léna Yenshua; 24.04.2018

Наконец, приложение TWAIN работает с этим сканером. Я буду работать с этим. Я не говорю, почему это работает с TWAIN, а не с WIA, но это реальность. Извините за эту трату времени. Спасибо за ответы. Хорошего дня.

person Léna Yenshua    schedule 25.04.2018

Я сейчас решаю эту самую проблему. Похоже, что драйвер N7100A устанавливает для свойства Pages device значение 0, что должно означать непрерывное сканирование, но метод передачи не может обработать это значение. Вы должны установить это свойство в 1:

var pages = 1;

// Not all devices have this property, but Fujitsu N7100A has.
device.Properties["Pages"]?.set_Value(ref pages);
person Javier Campón    schedule 08.08.2018