Question

Je ne parviens pas à faire numériser une numérisation couleur à partir de code c # avec mon Canon Pixma MP150. Le code suivant donne une image en noir et blanc ou, si je modifie la valeur de 6146 en 2, une image en niveaux de gris est créée. J'aimerais pouvoir avoir une numérisation couleur à partir du code. Je sais que le scanner produit des images couleur car je peux en créer une à l'aide de l'assistant xp dans & "Scanneurs et appareil photo &". Quelqu'un peut-il m'aider à comprendre quelle valeur je ne suis pas en train de définir pour une numérisation couleur? Toute la documentation et les exemples que je peux trouver se contentent de dire de changer la valeur de 6146.

Merci d'avoir pris le temps de lire ceci!

    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);
    }
Était-ce utile?

La solution

Si quelqu'un d'autre se le demande, vous devez définir " 4104 & "; ainsi que. Par défaut, il était réglé sur une profondeur de 1 bit. Cela a fait le tour pour moi.

setItem(Item1, "4104", 24);

Pour le savoir, je devais énumérer toutes les propriétés et voir comment elles étaient définies:

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()));
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top