1

TWAINdotNet ライブラリについてです。C#/WPF/VS2010 で基本的な仮想スキャナーの実験を行うために、過去 24 時間を費やしました。http://sourceforge.net/projects/twain-samples/files/から仮想スキャナ ドライバをダウンロードしてインストールしましたが、使用可能な TWAIN データ ソースのリストに問題なく表示されます。興味深いことに、このページで入手できるサンプル アプリケーションは、このドライバーでも問題なく動作します。この問題は、C#/WPF で使用しようとした場合にのみ発生します。

具体的には、DsUserInterface使用して呼び出しを行うMessage.EnableDSと、神が知っている理由で失敗します。UIを表示するかどうかに関係なく、すべての場合に失敗します。同様に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);
    }
}
4

0 に答える 0