我目前正在开发一个可以扫描图像的应用程序。它确实会成功扫描这些图像,但当尝试更改设备的扫描属性时,它只使用上次更改的属性。
我当前更改属性的代码如下所示:
public static string Scan()
{
WIA.Device scanner = ScannerManager.Scanner.Connect();
IItem scannerItem = scanner.Items[1];
AdjustWiaSettings(scannerItem);
ImageFile imageFile = (ImageFile)scannerItem.Transfer(FormatID.wiaFormatTIFF);
return SaveScannedFile(imageFile);
}
private static void AdjustWiaSettings(IItem scannerItem)
{
const string WIA_SCAN_COMPRESSION = "4107"; // valid values: 0,5,8
const string WIA_SCAN_COLORING = "6146"; //4 is Black-white, 2 is gray, 1 is color
SetWiaProperty(scannerItem.Properties, WIA_SCAN_COMPRESSION, 5);
SetWiaProperty(scannerItem.Properties, WIA_SCAN_COLORING, 4);
}
private static void SetWiaProperty(IProperties properties, object propName, object propValue)
{
Property prop = properties.get_Item(ref propName);
prop.set_Value(ref propValue);
}它只改变了这两个函数的着色属性,但是如果这两个SetWiaProperty函数被切换,它只改变压缩属性。
我尝试了一种不同的方法,迭代了所有的属性,但产生了相同的结果。
发布于 2020-03-30 23:02:34
这里的问题只是WIA的部分问题。WIA属性的设置似乎需要按属性的顺序进行。如果操作正确,上例中的传出扫描文件大小约为1 MB (低于30+ MB)。
真正的问题是我用来将文件转换成.pdf的MagickImage。我只检查过.pdf文件,从来没有检查过扫描本身的结果。产生的文件大小让我相信只使用了一个属性,而实际上,在没有改变转换方法的任何属性的情况下,使用基本输入的MagickImage将文件大小从每页1MB增加到13MB。
https://stackoverflow.com/questions/60926186
复制相似问题