Подтвердить что ты не робот

Почему WIA не видит мой сканер?

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

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

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

В проекте VS ссылается dll DLL-библиотеки Microsoft Windows Image Acquisition Library v2.0, и я включил 'using 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 (означает, что он включен).

Я подключил другие устройства (Digital SLR), и приведенный выше код может "видеть" их, поэтому код работает.

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

Это мой способ протестировать сканер 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;
}

Ответ 6

ICommonDialog dialog = new CommonDialog();
Device device = dialog.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false);

В качестве альтернативы.

Ответ 7

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

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