C#动态类型/ Silverlight 4 AutomationFactory问题

时间:2011-05-26 20:55:53

标签: c# silverlight dynamic comautomationfactory

我的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()方法,而且看起来很多。

2 个答案:

答案 0 :(得分:1)

看看这是否有帮助:Scanning an Image from Silverlight 4 using WIA Automation

获得图像似乎并不简单......

答案 1 :(得分:0)

ShowAcquireImage返回ImageFile,它有将内容保存到磁盘或流的方法