Почему WIA не видит мой сканер? - PullRequest
25 голосов
/ 10 марта 2010

Я пытаюсь использовать WIA (Microsoft Windows Image Acquisition Library v2.0) для создания приложения C # 3.5 WinForms в VS2008, работающего на Vista, для получения изображений со сканера.

Я знаю, что существует множество SDK, которые делают это (Accusoft, ByteScout, Knowledge Lake и т. Д.), Но мы хотели получить некоторый контроль над пользовательским интерфейсом (или его отсутствие) и возможность настраивать обработку и обработку изображений Именно поэтому мы пробуем угол WIA.

Однако мне не удалось заставить WIA «увидеть» мой сканер.

В проекте VS упоминается библиотека Microsoft Windows Image Acquisition v2.0, и я включил «использование WIA»; вверху страницы.

Вот раздел кода:

//Choose Scanner
CommonDialogClass class1 = new CommonDialogClass();
Device d = class1.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false);
if (d != null)
{
    this.DeviceID = d.DeviceID;
}
else
{
    //no scanner chosen
    return;
}

Хорошо соответствует, но строка 2 ( Устройство d = ... ) выдает следующую ошибку при запуске:
Исключение из HRESULT: 0x80210015

Из того, что я могу сказать, это обычно означает, что ваше устройство отключено от сети / не включено или устройство не совместимо с WIA.
Но рассматриваемый сканер отображается на панели управления / сканерах и камерах (означает, что он совместим с WIA) и работает при доступе через Photoshop (означает, что он включен).

Я подключил другие устройства (цифровая зеркальная фотокамера), и приведенный выше код может «видеть» их, поэтому код работает.

У кого-нибудь есть предложения относительно того, что идет не так и как это исправить?

Обновление 1 :
Я пробовал пару разных сканеров (Canon 5000F, Benq 5250C), но та же проблема.

Обновление 2 :
Мне не удалось найти однозначного доказательства этого, но я думаю, что сканеры, которые я тестировал, или, может быть, большинство сканеров :(, не совместимы и не поддерживаются WIA. Сейчас я изучаю использование TWAIN, но все равно хотел бы услышать о любом, кто имел некоторый успех с WIA.

Обновление 3 : Закончил канаву WIA и использование .NET Twain SDK (EZTwain). Все отсортировано сейчас. Спасибо всем за их вклад.

Ответы [ 7 ]

2 голосов
/ 24 ноября 2016

Я думаю, что ваш сканер не поддерживает WIA. Я рекомендую использовать TWAIN, который поддерживается большинством поставщиков.

Я рекомендую использовать NTWAIN библиотека:

Nuget Pakcage: https://www.nuget.org/packages/NTwain/

Исходный код: https://bitbucket.org/soukoku/ntwain

0 голосов
/ 25 августа 2016

Скорее всего, драйверы WIA для устройств не установлены. Я бы посоветовал вам использовать вместо него TWAIN, который поддерживается почти всеми поставщиками.

Существует довольно много программ с открытым исходным кодом, а также коммерческих оболочек TWAIN. Большинство из них работают для 32-битных приложений, а 64-битные приложения не могут получить доступ к 32-битным драйверам TWAIN . Если вам необходимо поддерживать как 64-битное, так и 32-битное приложение WinForms WPF, вы можете использовать Asprise C # VB.NET для сканирования twain wia scanner .

0 голосов
/ 14 марта 2015
ICommonDialog dialog = new CommonDialog();
Device device = dialog.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false);

Как альтернатива.

0 голосов
/ 14 января 2012

Это мой способ проверки сканера WIA:

private bool WIAScannerTest() 
{
       try
       {
           WIA.CommonDialog wiaObj = New WIA.CommonDialog(); 
           WIA.Device wiaDev = 
                  wiaObj.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType, false, false);
           return true;
       }
       catch (Exception ex)
       {}
       finally
       {
           if(wiaDev != null)
           {
               Marshal.ReleaseComObject(wiaDev)
               wiaDev = null;
           }
           if(wiaObj != null)
           {
              Marshal.ReleaseComObject(wiaObj)
              wiaObj = null;
           }
       }
       return false;
}
0 голосов
/ 02 апреля 2011
wiaImage = wiaDiag.ShowAcquireImage(WiaDeviceType.ScannerDeviceType, WiaImageIntent.GrayscaleIntent, WiaImageBias.MaximizeQuality, wiaFormatJPEG, true, true, false);
WIA.Vector vector = wiaImage.FileData;
FileExtention = wiaImage.FileExtension;
Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData()));
pbPreview1.Image = i;//to show preview of scanned image in picturebox
0 голосов
/ 09 сентября 2010

Я бы попробовал следующий код при подключении только вашего сканера

IDeviceManager dm = ClassFactory.createDeviceManager();
System.out.println(dm.deviceInfos().count());

если диспетчер устройств вообще может видеть ваш сканер

0 голосов
/ 10 марта 2010

Ознакомьтесь с этой статьей на CodeProject, которая охватывает TWAIN . Это может помочь вам и в этом направлении. Вот еще одна статья о WIA , хотя она немного устарела, но, тем не менее, стоит посмотреть.

...