Example #1
0
        private static IList <int> getAvailableResolutions(WiaSettings wiaSettings)
        {
            var availableResolutions = new List <int>();

            var horizontalResolution = wiaSettings.GetProperty("Horizontal Resolution");

            switch (horizontalResolution.SubType)
            {
            case WiaSubType.RangeSubType:
            {
                var stp = 100;
                var min = 100;
                var max = 2000;

                if (horizontalResolution.SubTypeMin <= 75)
                {
                    availableResolutions.Add(75);
                }

                if (horizontalResolution.SubTypeMin > min)
                {
                    min = horizontalResolution.SubTypeMin;
                }

                if (horizontalResolution.SubTypeStep > stp)
                {
                    stp = horizontalResolution.SubTypeStep;
                }

                if (horizontalResolution.SubTypeMax < max)
                {
                    max = horizontalResolution.SubTypeMax;
                }

                for (var i = min; i <= max; i += stp)
                {
                    availableResolutions.Add(i);
                }

                break;
            }

            case WiaSubType.ListSubType:
            {
                var subTypeValues = horizontalResolution.SubTypeValues;
                for (var i = 1; i <= subTypeValues.Count; i++)
                {
                    availableResolutions.Add(Convert.ToInt32(subTypeValues.get_Item(i)));
                }

                break;
            }
            }
            return(availableResolutions);
        }
Example #2
0
        /// <summary>
        /// Lists the connected scanners to the system.
        /// </summary>
        public static IList <ScannerSettings> GetScannerDevices()
        {
            var scanners    = new List <ScannerSettings>();
            var deviceInfos = new DeviceManager().DeviceInfos;

            for (var i = 1; i <= deviceInfos.Count; i++) // Using a regular for loop to avoid `System.IO.FileNotFoundException: Could not load file or assembly CustomMarshalers` in .NET Core 2x apps.
            {
                var info = deviceInfos[i];
                if (info.Type != WiaDeviceType.ScannerDeviceType)
                {
                    continue;
                }

                var device  = info.Connect();
                var scanner = device.Items[1];

                var wiaSettings     = new WiaSettings(device.Properties);
                var defaultSettings = new WiaSettings(scanner.Properties);

                var caps = wiaSettings.GetPropertyValue <int>("Document Handling Capabilities");
                scanners.Add(new ScannerSettings
                {
                    Name = info.Properties["Description"].get_Value().ToString(),
                    Id   = info.DeviceID,
                    SupportedResolutions      = getAvailableResolutions(defaultSettings),
                    ScannerDeviceSettings     = wiaSettings.ExtendedProperties,
                    ScannerPictureSettings    = defaultSettings.ExtendedProperties,
                    IsAutomaticDocumentFeeder = (caps & (int)WiaDpsDocumentHandlingSelect.FEEDER) != 0,
                    IsDuplex                 = (caps & (int)WiaDpsDocumentHandlingSelect.DUPLEX) != 0,
                    IsFlatbed                = (caps & (int)WiaDpsDocumentHandlingSelect.FLATBED) != 0,
                    SupportedEvents          = getDeviceEvents(device.Events),
                    SupportedTransferFormats = getSupportedTransferFormats(scanner)
                });

                Marshal.ReleaseComObject(device);
                Marshal.ReleaseComObject(scanner);
            }
            return(scanners);
        }
Example #3
0
 /// <summary>
 /// Scanner Picture Config. Setting properties like ColorFormat, Brightess, etc.
 /// </summary>
 public ScannerPictureConfig(WiaSettings wiaScannerPictureSettings, ScannerSettings scannerSettings)
 {
     _wiaScannerPictureSettings = wiaScannerPictureSettings;
     _scannerSettings           = scannerSettings;
 }