作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个支持使用 WIA 扫描的 C# (WinForm) 程序。我试图在扫描一个或多个文档之前设置设备属性。我主要想为扫描仪设置纸张尺寸。以下是代码片段:
foreach (Property property in selectedDevice.Properties)
{
//WiaProperties.WiaDpsHorizontalBedSize is my constant
if (property.PropertyID == WiaProperties.WiaDpsHorizontalBedSize)
{
//Set property value here...
}
}
我找到了 Horizontal Bed Size 属性,但问题是如何将其设置为一个值? property 之外有一个 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();
}
}
关于c# - Windows图像采集——C#中设置设备属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/912303/
Nginx 日志可用于分析用户地址位置,行为画像等,如何通过 Elastic Stack 进行一站式的数据采集,数据清洗,数据落地,数据可视化,让数据发挥真正的价值呢? 架构设计 涉及到 El
我正在为 Directshow 编写自定义视频渲染过滤器。我的渲染器假定传入像素一次组织一行像素(正确的假设?)并使用 DirectX 纹理将它们 blits 到其他地方的另一个 DirectX 显示
我是一名优秀的程序员,十分优秀!