2016-09-26 6 views
0

Я пытаюсь сканировать документ/фотографию с помощью WIA (Windows Image Acquisition Library v2.0) на C#, но когда я увеличиваю разрешение, оно не увеличивает разрешение, а увеличивает ширину и высоту изображения, но разрешение остается неизменным. (по умолчанию dpi сканера 75 точек на дюйм) ImageFile переменная всегда имеет 96 точек на дюйм.Разрешение C# WIA не увеличивает разрешение, а увеличивает ширину и высоту изображения. в C#

например. Если по умолчанию dpi 75, изображение имеет ширину и высоту 100, то , если я устанавливаю dpi на 150, изображение будет иметь ширину и высоту 200. , но полученный ImageFile всегда имеет 96 точек на дюйм, независимо от того, что я установил.

  WIA.ImageFile img = null; 
      WIA.Item Item = WiaDev.Items[1] as WIA.Item; 


      try 
      { 
       Item.Properties.get_Item("4104").set_Value(24); 
       Item.Properties.get_Item("6146").set_Value(1); 


       double OrigResolution = Convert.ToDouble(Item.Properties["6147"].get_Value().ToString()); 
       double ResDiff = 0.0; 
       int width = 0, height = 0; 
       if (OrigResolution < dpi) 
       { 
        ResDiff = 150/OrigResolution; 
        width = (int)Math.Floor((Convert.ToDouble(Item.Properties["6151"].get_Value().ToString()) * ResDiff)); 
        height = (int)Math.Floor((Convert.ToDouble(Item.Properties["6152"].get_Value().ToString()) * ResDiff)); 

        Item.Properties["6149"].set_Value(0); 
        Item.Properties["6150"].set_Value(0); 

        Item.Properties.get_Item("6147").set_Value(dpi.ToString("0.0")); 
        Item.Properties.get_Item("6148").set_Value(dpi.ToString("0.0")); 

        Item.Properties["6151"].set_Value(width); 
        Item.Properties["6152"].set_Value(height); 
       } 

       img = (ImageFile)WiaCommonDialog.ShowTransfer(Item, WIA.FormatID.wiaFormatJPEG, false); 
       img.SaveFile("D:\\Test.jpg"); 

ответ

0

Вот пример образец, вы можете попробовать в соответствии с ним

private void setItem(IItem item, object property, object value) 
    { 
     WIA.Property aProperty = item.Properties.get_Item(ref property); 
     aProperty.set_Value(ref value); 
    } 



    internal bool Scan(bool flatBed) 
    { 

     WIA.DeviceManager manager = new DeviceManager(); 
     bool result = false; 
     object something = 1; 
     object somethingElse; 
     WIA.Device scanner = manager.DeviceInfos.get_Item(ref something).Connect(); 
     IItem item = scanner.Items[1]; 
     setItem(item, "6146", 4); 
     setItem(item, "6147", 200); 
     setItem(item, "6148", 200); 
     setItem(item, "6151", 200 * 8.5); 
     setItem(item, "6152", 200 * 11); 
    } 

Первый SetItem цвет [4 черно-белый, 2 оттенки серого, 1 цвет, 0 не определено] Второй горизонтальное разрешение. Третий - это вертикулярное разрешение. Четвертый - область горизонтального сканирования. Пятая вертикальная область сканирования.

+0

Спасибо за ответ, но не работает, тот же результат здесь изображение [ссылка] (https://i.imgsafe.org/a1d5b4b4cf.jpg). –