23

WIAを使用して、スキャナーからWindowsフォームに画像をキャプチャしています。これが私が使用しているコードです:

private void button2_Click(object sender, EventArgs e)
{
    const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
    CommonDialogClass wiaDiag = new CommonDialogClass();
    WIA.ImageFile wiaImage = null;

    wiaImage = wiaDiag.ShowAcquireImage(
            WiaDeviceType.UnspecifiedDeviceType,
            WiaImageIntent.GrayscaleIntent,
            WiaImageBias.MaximizeQuality,
            wiaFormatJPEG, true, true, false);

    WIA.Vector vector = wiaImage.FileData;

    Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData()));
    i.Save(@"D:\prueba1.jpeg");
}

この小さなテストを実行しようとすると、次のエラーが発生します。

相互運用タイプ'WIA.CommonDialogClass'を埋め込むことはできません。代わりに、該当するインターフェースを使用してください。

この:

「WIA.CommonDialogClass」には「ShowAcquireImage」の定義が含まれておらず、「WIA.CommonDialogClass」タイプの最初の引数を受け入れる拡張メソッド「ShowAcquireImage」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?

最初のエラーが原因で2番目のエラーが発生していると思いますよね?

これを修正する方法について何か提案はありますか?

4

3 に答える 3

26

2 番目のエラーは、最初のエラーが原因です。Embed Interop Types 機能は、埋め込みインターフェイスのみをサポートし、クラスはサポートしません。WIA 参照でそのオプションを False に設定して相互運用ライブラリを展開するだけでなく、次のように修正することもできます。

 WIA.CommonDialog wiaDiag = new WIA.CommonDialog();

直感的ではありませんが、 new演算子を使用して COM インターフェイスを作成することは許可されています。CommonDialogは Winforms CommonDialog クラスとあいまいであるため、名前空間の名前にプレフィックスを付ける必要があります。

于 2010-11-18T21:37:15.123 に答える