WIA Automation для определения цвета сканера не работает

StackOverflow https://stackoverflow.com/questions/1055572

Вопрос

Я не могу заставить свой Canon Pixma MP150 сканировать цветной скан из кода c #.Следующий код приводит к черно-белому изображению, или, если я изменю значение 6146 на 2, то будет создано изображение в оттенках серого.Я хотел бы иметь возможность выполнять цветное сканирование из кода.Я знаю, что сканер делает цветные изображения, потому что я могу сделать это с помощью мастера xp в разделе "сканеры и камера".Кто-нибудь может помочь мне выяснить, какое значение я не устанавливаю для цветного сканирования.Во всей документации и примерах, которые я могу найти, просто скажите, чтобы изменить значение 6146.

Спасибо, что нашли время прочитать это!

    private void ScanAndSaveOnePage ()
    {
        WIA.CommonDialog Dialog1 = new WIA.CommonDialogClass();
        WIA.DeviceManager DeviceManager1 = new WIA.DeviceManagerClass();
        System.Object Object1 = null;
        System.Object Object2 = null;
        WIA.Device Scanner = null;

        Scanner = Dialog1.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType, false, false);

        WIA.Item Item1 = Scanner.Items[1];

        setItem(Item1, "6146", 1);
        setItem(Item1, "6147", 150);
        setItem(Item1, "6148", 150);
        setItem(Item1, "6151", 150 * 8.5);
        setItem(Item1, "6152", 150 * 11);

        WIA.ImageFile Image1 = new WIA.ImageFile();
        WIA.ImageProcess ImageProcess1 = new WIA.ImageProcess();
        Object1 = (Object)"Convert";
        ImageProcess1.Filters.Add(ImageProcess1.FilterInfos.get_Item(ref Object1).FilterID, 0);

        Object1 = (Object)"FormatID";
        Object2 = (Object)WIA.FormatID.wiaFormatBMP;
        ImageProcess1.Filters[1].Properties.get_Item(ref Object1).set_Value(ref Object2);

        Object1 = null;
        Object2 = null;

        Image1 = (WIA.ImageFile)Item1.Transfer(WIA.FormatID.wiaFormatBMP);

        string DestImagePath = @"C:\test.bmp";
        File.Delete(DestImagePath);
        Image1.SaveFile(DestImagePath);
    }

    private void setItem (IItem item, object property, object value)
    {
        WIA.Property aProperty = item.Properties.get_Item(ref property);
        aProperty.set_Value(ref value);
    }
Это было полезно?

Решение

На случай, если кому-то еще интересно, вы также должны установить "4104".По умолчанию для него была установлена глубина в 1 бит.Это сработало за меня.

setItem(Item1, "4104", 24);

Чтобы выяснить это, мне пришлось перечислить все свойства и посмотреть, на что они были установлены:

foreach (Property propertyItem in item.Properties)
{
    if (!propertyItem.IsReadOnly)
    {
        Console.WriteLine(String.Format("{0}\t{1}\t{2}", propertyItem.Name, propertyItem.PropertyID, propertyItem.get_Value()));
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top