Acquisizione immagini Windows – impostazione delle proprietà del dispositivo in C #

Ho un programma C # (WinForm) che supporta la scansione usando WIA. Sto cercando di impostare le proprietà del dispositivo prima di eseguire la scansione di uno o più documenti. Principalmente voglio impostare il formato della carta per lo scanner. Di seguito è riportato uno snippet del codice:

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

Sto trovando la proprietà Horizontal Bed Size, ma la domanda è: come posso impostarla su un valore? C’è una proprietà set_Value fuori dalla proprietà ma sembra prendere un riferimento ad un object risultato. Quindi sono in perdita su come posso impostare le proprietà su un dispositivo?

Sto lavorando anche a un progetto di scansione e ci sono pochissimi esempi di WIA. Questo codice è quello che stai cercando per impostare la dimensione del letto, DPI, ecc. Controlla il metodo SetProperty con un esempio su come gestire 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(); } }