[英]how to install Windows Image Acquisition for development of image capture, in C#
[英]Windows image acquisition - setting device properties in C#
我有一個C#(WinForm)程序,支持使用WIA進行掃描。 我正在嘗試在掃描一個或多個文檔之前設置設備屬性。 主要是我想設置掃描儀的紙張尺寸。 以下是代碼片段:
foreach (Property property in selectedDevice.Properties)
{
//WiaProperties.WiaDpsHorizontalBedSize is my constant
if (property.PropertyID == WiaProperties.WiaDpsHorizontalBedSize)
{
//Set property value here...
}
}
我找到了水平床尺寸屬性,但問題是如何將其設置為值? 有一個屬性的set_Value屬性,但似乎需要引用一個結果對象。 所以我不知道如何在設備上設置屬性?
我正在研究一個掃描項目,而且很少有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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.