1

2400dpi 以上の解像度でドキュメントをスキャンすると、(たとえば) 次のエラー メッセージが表示されます。

COMException: Ausnahme von HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED)

また

COMException: Ausnahme von HRESULT: 0x8021006F

次のいずれかの行で

            img = itm.Transfer(scanFormat.ScanFormat) as WIA.ImageFile;
            img = ip.Apply(img as WIA.ImageFile);

上記のエラーのスクリーンショット:

http://www.amarant-it.de/TempDownload/WIA_Error01.png

または、WIA_Error02.png および WIA_Error03.png と同じパス

スキャンには、次のコードを使用します。

            #region Image-Convert-Settings
            //IP.Filters.Add IP.FilterInfos("Convert").FilterID
            //IP.Filters(1).Properties("FormatID").Value = wiaFormatJPEG
            WIA.IImageProcess ip = new WIA.ImageProcessClass();
            object convert = "Convert";
            WIA.IFilterInfo fi = ip.FilterInfos.get_Item(ref convert);
            ip.Filters.Add(fi.FilterID, 0);
            convert = "FormatID";
            object formatstring = scanFormat.ScanFormat;
            WIA.IFilter filter;
            foreach (WIA.IFilter fTemp in ip.Filters)
            {
                filter = fTemp;
                WIA.IProperty prop = filter.Properties.get_Item(ref convert);
                prop.set_Value(ref formatstring);
            }
            #endregion
            #region Image-Scan + Convert
            img = itm.Transfer(scanFormat.ScanFormat) as WIA.ImageFile;
            img = ip.Apply(img as WIA.ImageFile);
            img.SaveFile("D:\\scan2." + img.FileExtension);
            Image image = Image.FromFile("D:\\scan2." + img.FileExtension);
            ilImages.Images.Add(image.ToString(), image);
            alImages.Add(image);
            if (ImageScanned != null)
            {
                ImageScanned(image);
            }
            #endregion

誰でもこの問題を解決できますか?

ありがとう

4

1 に答える 1

0

A4/8.5x11 をカラー (32 ビット) で実行していると思います。これは BMP で 2 ギガに非常に近く、32 ビット符号付き数値の限界に近い値です。解像度ではなく、総データサイズだと思います。少なくとも COM データ構造の制限は、Silverlight スキャン アプリケーションの作成者の結論です。考えてみれば、すべてが 32 ビット プロセスのバッファに表示された場合、連続した大きなメモリ チャンクを割り当てようとすると、メモリが不足することになります。

私の WIA の知識は少し薄れてきましたが、私の記憶が正しければ、WIA はサービスを介してスキャンします。それが 32 ビットで、COM を介して呼び出している場合、それがバッファと制限の原因です。それと、スキャン パラメータが正しくない場合は、BMP (圧縮なし) が選択されます。カラー用に JPEG を実行できるかどうか、またはコンバーターを経由する必要があるかどうかを思い出すことができないようです。これほど大きなデータを処理したい場合は、C++ API に切り替えることが 1 つの選択肢として考えられます。これにより、バッファ アクセスではなくストリーミング アクセスが可能になります (使用したことはありませんが、役立つ場合に備えて言及しました)。

于 2011-05-15T15:20:58.007 に答える