【问题标题】:Windows image acquisition - setting device properties in C#Windows 图像采集 - 在 C# 中设置设备属性
【发布时间】:2010-10-29 01:52:33
【问题描述】:

我有一个支持使用 WIA 进行扫描的 C# (WinForm) 程序。我正在尝试在扫描一个或多个文档之前设置设备属性。首先我想为扫描仪设置纸张尺寸。以下是sn-p的代码:

foreach (Property property in selectedDevice.Properties)
{
   //WiaProperties.WiaDpsHorizontalBedSize is my constant
   if (property.PropertyID == WiaProperties.WiaDpsHorizontalBedSize)
   {
       //Set property value here...             
   }
}

我正在查找 Horizo​​ntal Bed Size 属性,但问题是如何将其设置为一个值?属性之外有一个 set_Value 属性,但这似乎对结果对象进行了引用。所以我不知道如何在设备上设置属性?

【问题讨论】:

    标签: c# wia


    【解决方案1】:

    我也在做一个扫描项目,WIA 的例子很少。这段代码是您正在寻找的用于设置床尺寸、DPI 等的代码。请查看 SetProperty 方法以及如何处理 set_Value 的示例。

    class Scan
    {
        // Scanner only device properties (DPS)
        public const int WIA_RESERVED_FOR_NEW_PROPS = 1024;
        public const int WIA_DIP_FIRST = 2;
        public const int WIA_DPA_FIRST = WIA_DIP_FIRST + WIA_RESERVED_FOR_NEW_PROPS;
        public const int WIA_DPC_FIRST = WIA_DPA_FIRST + WIA_RESERVED_FOR_NEW_PROPS;
        public const int WIA_DPS_FIRST = WIA_DPC_FIRST + WIA_RESERVED_FOR_NEW_PROPS;
        public const int WIA_DPS_DOCUMENT_HANDLING_STATUS = WIA_DPS_FIRST + 13;
        public const int WIA_DPS_DOCUMENT_HANDLING_SELECT = WIA_DPS_FIRST + 14;
        public const int FEEDER = 1;
        public const int FLATBED = 2;
        public const int DUPLEX = 4;
        public const int FEED_READY = 1;
    
        WIA.CommonDialog _dialog = new WIA.CommonDialog();
        WIA.Device _scanner;
    
        public void ADFScan()
        {
    
            _dialog = new CommonDialogClass();
            _scanner = _dialog.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType, false, false);
    
    
            foreach (Property item in _scanner.Items[1].Properties)
            {
                switch (item.PropertyID)
                {
                    case 6146: //4 is Black-white,gray is 2, color 1
                        SetProperty(item, 2);
                        break;
                    case 6147: //dots per inch/horizontal 
                        SetProperty(item, 100);
                        break;
                    case 6148: //dots per inch/vertical 
                        SetProperty(item, 100);
                        break;
                    case 6149: //x point where to start scan 
                        SetProperty(item, 0);
                        break;
                    case 6150: //y-point where to start scan 
                        SetProperty(item, 0);
                        break;
                    case 6151: //horizontal exent 
                        SetProperty(item, (int)(8.5 * 100));
                        break;
                    case 6152: //vertical extent 
                        SetProperty(item, 11 * 100);
                        break;
                }
            }
            ImageFile image = (ImageFile)_scanner.Items[1].Transfer(FormatID.wiaFormatPNG);
            System.IO.File.Delete("tmp.png");
            image.SaveFile("tmp.png");
        }
    
        private void SetProperty(Property property, int value)
        {
            IProperty x = (IProperty)property;
            Object val = value;
            x.set_Value(ref val);
        }
    
    
        public void test()
        {
            bool WantsToScan = true;
            while (WantsToScan) ScanAndSaveOnePage();
    
        }
    
    
        static void Main(string[] args)
        {
            new Scan().test();
        }
    }
    

    【讨论】:

    • 不错。你能解释一下为什么这个演员阵容是必要的吗? IProperty x = (IProperty) 属性;
    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2015-10-15
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多