WIA Silverlight Интеграция со сканером - PullRequest
0 голосов
/ 05 декабря 2010

Я новичок в Silverlight, и я экспериментирую с интеграцией сканера wia.Я знаю, используя WIA.CommonDialog, showacquireimage (), я могу получить изображение со сканера.Я пытаюсь получить доступ к устройству напрямую и выполнить команду сканирования, чтобы избежать взаимодействия с пользователем.

Я могу подключиться к устройству.Но единственной командой, доступной со сканера, является синхронизация.Я пытаюсь использовать ExecuteCommand для объекта устройства, но я не уверен, какую команду использовать.Любое направление будет оценено.

        using (dynamic DeviceManager1 = AutomationFactory.CreateObject("WIA.DeviceManager"))
        {
            var deviceInfos = DeviceManager1.DeviceInfos;
            for(int i= 1;i<=deviceInfos.Count;i++)
            {
                //check if the device is a scanner
                if (deviceInfos.Item(i).Type.ToString() == "1")
                {
                    var IDevice = deviceInfos.Item(i).Connect();
                    deviceN.Text = IDevice.Properties("Name").Value.ToString();

                    var dv = IDevice.Commands;
                    for (int j = 0; j <= dv.Count; j++)
                    {

                        deviceN.Text += " " + dv.Item(i).CommandID.ToString() + " " + dv.Item(i).Description.ToString();
                    }

                }

            }            
        }

1 Ответ

1 голос
/ 09 июня 2011

Вам не нужно иметь дело с командами устройства для сканирования документа. Вместо этого вам нужно использовать первый элемент устройства под объектом устройства. Вот небольшой пример, который работает сам по себе, без проверок на ошибки для облегчения чтения.

//using WIA;

bool showProgressBar = false;

DeviceManager deviceManager = new DeviceManagerClass();

foreach(DeviceInfo info in deviceManager.DeviceInfos)
{
    if(info.Type == WiaDeviceType.ScannerDeviceType)
    {
        Device device = info.Connect();

        ImageFile imageFile = null;

        Item deviceItem = null;

        //Read through the list of items under the device...
        foreach(Item item in device.Items)
        {
            //Pick the very first one!
            deviceItem = item;
            break;
        }

        if(showProgressBar == true)
        {
            //Scan without GUI, but display the progress bar dialog.
            CommonDialogClass commonDialog = new CommonDialogClass();
            imageFile = (ImageFile)commonDialog.ShowTransfer(deviceItem, FormatID.wiaFormatBMP, false);
        }
        else
        {
            //Scan without GUI, no progress bar displayed...
            imageFile = (ImageFile)deviceItem.Transfer(FormatID.wiaFormatBMP);
        }

        imageFile.SaveFile("C:\\image.bmp");
    }
}

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

Недавно я создал простой в использовании класс для работы со сканерами, совместимыми с WIA, его можно загрузить с этой страницы ... Он предназначен для .Net Framework 2.0, C #. Может быть, это может пригодиться в вашем проекте, вам придется сделать несколько строк кода, включая настройку основных свойств. :)

...