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); }
/// <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); }
/// <summary> /// Scanner Picture Config. Setting properties like ColorFormat, Brightess, etc. /// </summary> public ScannerPictureConfig(WiaSettings wiaScannerPictureSettings, ScannerSettings scannerSettings) { _wiaScannerPictureSettings = wiaScannerPictureSettings; _scannerSettings = scannerSettings; }