Виртуальный сканер (TWAIN) не работает в C# (WPF)
Речь идет о библиотеке TWAINdotNet. Последние 24 часа я провел, пытаясь провести базовый эксперимент с виртуальным сканером в C#/WPF/VS2010. Я уже скачал и установил драйвер виртуального сканера с http://sourceforge.net/projects/twain-samples/files/ и он выглядит очень хорошо в списке доступных источников данных TWAIN. Интересно, что пример приложения, которое доступно на этой странице, прекрасно работает и с этим драйвером. Проблема возникает только тогда, когда я пытаюсь использовать его через C#/WPF.
В частности, звонит DsUserInterface
с помощью Message.EnableDS
не удастся Богу - знает какая причина. Во всех случаях происходит сбой, независимо от того, прошу ли я показать интерфейс или нет. так же DsImageLayout
вызов также приводит к сбою при попытке установить область сканирования. И последнее, но не менее важное: попытка установить единицы измерения в дюймах (или что-то еще) также не дает результатов. Вызов не сбой, но предыдущее значение остается без изменений.
Вот код на случай, если я что-то делаю не так:
public partial class MainWindow : Window
{
TwainDotNet.Wpf.WpfWindowMessageHook mTwnHook;
TwainDotNet.Twain mTWN;
TwainDotNet.ScanSettings setting = new TwainDotNet.ScanSettings();
public MainWindow()
{
InitializeComponent();
}
private void btnScan_Click(object sender, RoutedEventArgs e)
{
InitializeTWAIN();
mTWN.ScanningComplete += twn_ScanningComplete;
mTWN.TransferImage += twn_TransferImage;
mTWN.StartScanning(setting);
}
private void InitializeTWAIN()
{
mTwnHook = new TwainDotNet.Wpf.WpfWindowMessageHook(this);
mTWN = new TwainDotNet.Twain(mTwnHook);
setting.UseAutoFeeder = true;
setting.UseDocumentFeeder = true;
setting.UseDuplex = true;
setting.TransferCount = 1;
setting.Page = new TwainDotNet.PageSettings()
{
Orientation = TwainDotNet.TwainNative.Orientation.Auto,
Size = TwainDotNet.TwainNative.PageType.UsLetter
};
setting.Area = new TwainDotNet.AreaSettings(TwainDotNet.TwainNative.Units.Millimeters, 0f, 0f, 279.4f, 215.9f);
setting.Resolution = new TwainDotNet.ResolutionSettings()
{
ColourSetting = TwainDotNet.ColourSetting.Colour,
Dpi = 100
};
setting.ShouldTransferAllPages = true;
setting.ShowTwainUI = false;
}
void twn_TransferImage(object sender, TwainDotNet.TransferImageEventArgs e)
{
//save image
}
void twn_ScanningComplete(object sender, TwainDotNet.ScanningCompleteEventArgs e)
{
if (e.Exception != null)
MessageBox.Show(e.Exception.Message);
}
}