#c# #silverlight #dynamic #comautomationfactory
#c# #silverlight #динамический #comautomationfactory
Вопрос:
У меня есть эта небольшая функция в моем OOB-приложении Silverlight 4, которая получает изображение со сканера:
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;
}
Я бы хотел, чтобы функция возвращала растровое изображение, но я не уверен, как привести динамический тип. Я даже не уверен, какого типа был бы файл ImageFile, если бы он не был динамическим. Приведенный выше метод возвращает следующее исключение:
Unable to cast object of type 'System.Runtime.InteropServices.Automation.AutomationMetaObjectProvider' to type 'System.Windows.Media.Imaging.BitmapImage'.
Кто-нибудь может дать рекомендации? Я не уверен, что это вопрос о ключевом слове dynamic или AutomationFactory, поскольку оба они для меня новы. :/
Редактировать:
Я знаю, что это изображение, потому что, если я сделаю это:
string filePath = string.Format("c:\{0}.jpg", Guid.NewGuid());
imageFile.SaveFile(filePath);
MessageBox.Show(string.Format("Saved {0}", filePath));
Он сохраняет отсканированный документ в формате jpg. Я попытался выяснить, какой объект в .В NET Framework есть метод SaveFile(), и, по-видимому, их много.
Комментарии:
1. Почему бы вам не попробовать GetType () для динамического объекта во время запуска отладчика. Посмотрите, дает ли это вам представление о том, какой объект вы получаете обратно и, следовательно, какого рода изображение, если таковое имеется.
2. GetType() сообщает мне, что это ‘System.Runtime. Службы взаимодействия. Автоматизация. AutomationMetaObjectProvider’
Ответ №1:
Посмотрите, поможет ли это: Сканирование изображения из Silverlight 4 с помощью WIA Automation
Кажется, получить изображение непросто…
Комментарии:
1. Вот ссылка на сообщение, в котором показан код, который я в конечном итоге использовал: brentlamborn.com/post /…
Ответ №2:
ShowAcquireImage возвращает файл изображения, у него есть методы для сохранения содержимого на диск или поток