我所拥有的:我使用PowerShell 2.0和WIA快速扫描并保存来自平板扫描仪的图像。我们的目标是避免所有的对话框,只需点击一下。这段代码简单、简短且有效。
$deviceManager = new-object -ComObject WIA.DeviceManager
$device = $deviceManager.DeviceInfos.Item(1).Connect()
foreach ($item in $device.Items) {
$image = $item.Transfer()
}
$image.SaveFile("D:Scan.$($image.fileExtension)")
问题:上述方法总是生成BMP文件。但是我想要PNG文件。
我看到这段c#代码使用了另一种WIA方法,用户可以将一些参数传递给扫描对话框,如PNG作为文件格式
现在我想知道是否以及如何可能实现相同的只有与PowerShell
我在这里找到了大部分代码
- http://deletethis.net/dave/?uri=http%3A%2F%2Fcerealnumber.livejournal.com%2F47638.html
- http://ardalis.com/powershell-control-over-nikon-d3000-camera
- http://msdn.microsoft.com/en-us/library/windows/desktop/ms630806 (v = vs.85) . aspx
PS:以防您的解决方案涉及"拍照"命令(wiaCommandTakePicture)。不幸的是,我的canscan LIDE 210不支持该命令
您应该将FormatID字符串参数传递给Transfer方法。可用格式列表可在MSDN
中获得。然而,有一个问题。如本文所述,Transfer方法不必观察请求的格式,在这种情况下,必须手动转换输出。通过将MSDN的VB示例转换为PowerShell,我们得到这个(在我的机器上使用我的扫描仪):
$deviceManager = new-object -ComObject WIA.DeviceManager
$device = $deviceManager.DeviceInfos.Item(1).Connect()
$wiaFormatPNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
foreach ($item in $device.Items) {
$image = $item.Transfer($wiaFormatPNG)
}
if($image.FormatID -ne $wiaFormatPNG)
{
$imageProcess = new-object -ComObject WIA.ImageProcess
$imageProcess.Filters.Add($imageProcess.FilterInfos.Item("Convert").FilterID)
$imageProcess.Filters.Item(1).Properties.Item("FormatID").Value = $wiaFormatPNG
$image = $imageProcess.Apply($image)
}
$image.SaveFile("C:/my_full_path/test.png")