我的Silverlight 4 OOB应用程序中有一个小功能,可以从扫描仪获取图像:
public static BitmapImage GetImageFromScanner()
{
try
{
using (dynamic CommonDialog = AutomationFactory.CreateObject("WIA.CommonDialog"))
{
//Param meanings: (scanner, black and white, maximize quality)
dynamic imageFile = CommonDialog.ShowAcquireImage(1, 2, 131072);
if (imageFile != null)
{
return (BitmapImage)imageFile;
}
}
}
catch (System.Runtime.InteropServices.COMException ex)
{
if (ex.ErrorCode == -2145320939)
{
MessageBox.Show("Could not find an attached scanner.", "Scanner Error", MessageBoxButton.OK);
}
else if (ex.ErrorCode == -2145320957)
{
MessageBox.Show("There is no paper in the scanner.", "Scanner Error", MessageBoxButton.OK);
}
}
return null;
}
我希望函数返回一个BitmapImage,但我不知道如何转换动态类型。如果它不是动态的,我甚至不确定imageFile的类型。上述方法返回以下异常:
Unable to cast object of type 'System.Runtime.InteropServices.Automation.AutomationMetaObjectProvider' to type 'System.Windows.Media.Imaging.BitmapImage'.
有人可以提供指导吗?我不确定这是关于动态关键字还是AutomationFactory的问题,因为这两个对我来说都是新手。 :/
修改
我知道这是一张图片,因为如果我这样做:
string filePath = string.Format("c:\\{0}.jpg", Guid.NewGuid());
imageFile.SaveFile(filePath);
MessageBox.Show(string.Format("Saved {0}", filePath));
它将扫描的文档保存为jpg。我试图弄清楚.NET框架中的哪个对象有一个SaveFile()方法,而且看起来很多。
答案 0 :(得分:1)
看看这是否有帮助:Scanning an Image from Silverlight 4 using WIA Automation
获得图像似乎并不简单......
答案 1 :(得分:0)
ShowAcquireImage返回ImageFile,它有将内容保存到磁盘或流的方法