문제

C# 코드에서 색상 스캔을 스캔하기 위해 Canon Pixma MP150을 얻을 수 없습니다. 다음 코드는 흑백 이미지를 초래하거나 6146으로 값을 변경하면 회색조 이미지가 생성됩니다. 코드에서 색상 스캔을 받고 싶습니다. "스캐너와 카메라"에서 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