Frage

Ich kann nicht mein Canon Pixma MP150 erhalten einen Farbscan von c # Code zu scannen. Der folgende Code ist, was zu einem Schwarz-Weiß-Bild, oder wenn ich den Wert von 6146-2 dann einem Graustufenbild erstellt wird, ändern. Ich möchte einen Farbscan von Code haben können. Ich weiß, dass die Scanner Farbbilder tut, weil ich in „Scanner und Kamera“ einen durch die xp-Assistenten tun kann. Kann mir jemand etwas Wert helfen, herauszufinden, ich nicht für einen Farbscan setze. Die gesamte Dokumentation und Beispiele, die ich finden kann nur sagen, den Wert von 6146 zu ändern.

Vielen Dank für die Zeit nehmen, diese zu lesen!

    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);
    }
War es hilfreich?

Lösung

Falls jemand fragt, müssen Sie „4104“ als auch gesetzt. Standardmäßig wurde es auf 1 Bit-Tiefe eingestellt. Das hat den Trick für mich.

setItem(Item1, "4104", 24);

Um dies heraus zu finden, ich hatte alle Eigenschaften aufzuzählen und sehen, was sie auf:

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()));
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top