C# WIA 设置分辨率不会增加分辨率,而是增加图像的宽度和高度。在 C# 中

Posted

技术标签:

【中文标题】C# WIA 设置分辨率不会增加分辨率,而是增加图像的宽度和高度。在 C# 中【英文标题】:C# WIA set resolution doesnt increase resolution instead increases image width and height. in C# 【发布时间】:2017-02-03 19:34:53 【问题描述】:

我正在尝试使用 C# 中的 WIA(Windows 图像采集库 v2.0)扫描文档/照片,但是当我增加分辨率时,它不会增加分辨率,而是增加图像的宽度和高度,但分辨率保持不变。 (扫描仪的默认 dpi 为 75 dpi) ImageFile 变量始终具有 96 dpi。

例如。 如果默认 dpi 为 75,图像的宽度和高度为 100,则 如果我将 dpi 设置为 150,图像的宽度和高度将为 200。 但无论我设置了什么 dpi,生成的 ImageFile 始终具有 96 dpi。

            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");

【问题讨论】:

【参考方案1】:

这里是样例,你可以照着试试

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个未指定] 二是水平分辨率。 三是垂直分辨率。 四是水平扫描区域。 第五个是垂直扫描区域。

【讨论】:

感谢回复,但不工作,同样的结果是图像link。

以上是关于C# WIA 设置分辨率不会增加分辨率,而是增加图像的宽度和高度。在 C# 中的主要内容,如果未能解决你的问题,请参考以下文章

WIA 2.0 HP ScanJet 7650 特定问题

deppin增加显示器分辨率设置

Deppin系统 Liunx增加一个自定义分辨率开机自启动

设置 TWAIN 扫描的分辨率

在 matplotlib 中增加 gif 分辨率

怎么改变pdf的分辨率