WIA自动化扫描仪色彩的意图不工作 [英] WIA Automation for scanner color intent is not working

查看:603
本文介绍了WIA自动化扫描仪色彩的意图不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不能让我的佳能PIXMA MP150扫描从C#code彩色扫描。下面code是导致黑白图像,或者如果我的6146值更改为2,然后创建一个灰度图像。我希望能有从code彩色扫描。我知道扫描仪确实彩色图像,因为我可以通过在扫描仪和相机的XP向导做一。
谁能帮我找出什么价值,我没有设定一个彩色扫描。所有的文档和例子我能找到的只是说改变6146的值。

感谢您抽出时间阅读本!

 私人无效ScanAndSaveOnePage()
    {
        WIA.CommonDialog Dialog1 =新WIA.CommonDialogClass();
        WIA.DeviceManager DeviceManager1 =新WIA.DeviceManagerClass();
        System.Object的Object1 = NULL;
        System.Object的Object2的= NULL;
        WIA.Device扫描仪= NULL;        扫描仪= Dialog1.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType,假的,假的);        WIA.Item项目1 = Scanner.Items [1];        setItem(项目1,6146,1);
        setItem(项目1,6147,150);
        setItem(项目1,6148,150);
        setItem(项目1,6151,150 * 8.5);
        setItem(项目1,6152,150 * 11);        WIA.ImageFile = Image1的新WIA.ImageFile();
        WIA.ImageProcess ImageProcess1 =新WIA.ImageProcess();
        Object1 =(对象)转换;
        ImageProcess1.Filters.Add(ImageProcess1.FilterInfos.get_Item(REF Object1).FilterID,0);        Object1 =(对象)FormatID
        = Object2的(对象)WIA.FormatID.wiaFormatBMP;
        ImageProcess1.Filters [1] .Properties.get_Item(参考Object1).set_Value(REF Object2的);        Object1 = NULL;
        Object2的= NULL;        此搜索=(WIA.ImageFile)Item1.Transfer(WIA.FormatID.wiaFormatBMP);        字符串DestImagePath = @C:\\ TEST.BMP
        File.Delete(DestImagePath);
        Image1.SaveFile(DestImagePath);
    }    私人无效setItem(的iItem项目,对象属性,对象的值)
    {
        WIA.Property aProperty = item.Properties.get_Item(REF属性);
        aProperty.set_Value(参考值);
    }


解决方案

在情况下,其他人很纳闷,你必须设置4104为好。默认情况下,被设定为1位深度。这奏效了我。

setItem(项目1,4104,24);

为了找到这一点,我不得不列举的所有属性,看看它们被设置为:

 的foreach(房产propertyItem在item.Properties)
{
    如果(!propertyItem.IsReadOnly)
    {
        Console.WriteLine(的String.Format({0} \\ t {1} \\ t {2},propertyItem.Name,propertyItem.PropertyID,propertyItem.get_Value()));
    }
}

I cannot get my Canon Pixma MP150 to scan a color scan from c# code. The following code is resulting in a black and white image, or if I change the value of 6146 to 2 then a grayscale image is created. I would like to be able to have a color scan from code. I know the scanner does color images because I can do one through the xp wizard in "scanners and camera". Can anyone help me figure out what value I am not setting for a color scan. All documentation and examples I can find just say to change the value of 6146.

Thank you for taking the time to read this!

    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);
    }

解决方案

In case anyone else is wondering, you have to set "4104" as well. By default it was set to 1 bit depth. That did the trick for me.

setItem(Item1, "4104", 24);

In order to find this out, I had to enumerate all the properties and see what they were set to:

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()));
    }
}

这篇关于WIA自动化扫描仪色彩的意图不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆