2009-06-28 7 views
6

Canon Pixma MP150에서 C# 코드의 컬러 스캔을 스캔 할 수 없습니다. 다음 코드는 흑백 이미지로 나타나거나 6146의 값을 2로 변경하면 그레이 스케일 이미지가 생성됩니다. 코드에서 컬러 스캔을 할 수 있기를 바랍니다. "스캐너와 카메라"의 XP 마법사를 통해 스캐너를 수행 할 수 있기 때문에 스캐너가 컬러 이미지를 사용한다는 것을 알고 있습니다. 누구나 컬러 스캔을 위해 설정하지 않은 값을 파악하는 데 도움을 줄 수 있습니까? 모든 설명서와 예제를 통해 방금 6146 값을 변경할 수 있습니다.WIA 스캐너 색상의 의도가 작동하지 않습니다.

시간을내어 읽어 주셔서 감사합니다.

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

기본적으로 WIA_IPS_CUR_INTENT = WIA_INTENT_IMAGE_TYPE_COLOR 및 WIA_IPA_DEPTH = 24 참조 https : //로 msdn.microsoft.com/en-us/library/windows/desktop/ms630190(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/windows/desktop/ms630194(v= vs.85) .aspx – JDPeckham

답변

7

다른 사람이 궁금해하는 경우에는 "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())); 
    } 
} 
+0

고마워! 그게 효과가 !!!! –