7

高速スキャナー用に最適化された画像取得アプリケーションを作成しようとしています(150ppmの速度で各用紙に最大6つの圧縮画像[カラー+グレー+バイナリ][フロント+リア]を提供できます)速度の問題があります。TWAINテクノロジとメモリバッファ転送モード(TWSX_MEMORY)を使用して、スキャナーからイメージバッファー(メモリにロードされたJPEGまたはTIFFファイルとして)を受け取り、アプリケーションの宛先パスに保存します。サムネイルを作成したくない場合、アプリケーションによってスキャナーの速度が低下することはありませんが、作成する方法により(C ++ TWAIN処理dllのファイルにバッファーを保存し、.NETホストアプリケーションに通知します)関数ポインタを使用して宛先ファイルのパスを指定し、C#で画像ファイルを開き、サムネイル画像を作成すると、私のアプリケーションではスキャン速度が大幅に低下します。別のスレッドでロードフェーズを実行し、アンマネージドイメージファイルバッファーを.NETホストに送信し、安全でないコンテキスト(UnmanagedMemoryStream)でロードしてサムネイルを作成するなど、いくつかの最適化を試みました。しかし、速度は大幅に向上しませんでした。だから私の質問は:

メモリに画像ファイルバッファがある場合(たとえば、サムネイルを埋め込まずに圧縮された24ビットJPEG)、そこからサムネイル画像をすばやく直接作成する方法はありますか?この場合、サムネイルを作成するための最速の方法として何を提案しますか?

4

2 に答える 2

7

JPEG画像の場合は、ほとんどのDCTデータを破棄し、DCT係数のみを使用して2乗のサムネイルを作成できます。

そのソースを見つけることができたら、EnlightenmentプロジェクトのEPEGを見てください。画像を完全にデコードまたは解凍することなく、JPEGファイルで探していることを正確に実行します。ソースコードは非常に有益です。

他の画像形式の場合、それはそれほど単純ではありません。画像をデコードしてメモリバッファにレンダリングしてから、独自のスケーリングを実行する必要があります。CImgとboost::GILライブラリがそれを支援します。

于 2009-08-22T18:21:17.307 に答える
3

問題は、そもそも画像を取得するよりも、画像をサムネイルに変換する方が時間がかかるということだと思いますよね?

より高速なサムネイル変換プログラムで問題が解決する場合もありますが、低速のコンピューターを使用している場合は十分ではない可能性があります。代わりに、サムネイルに変換する画像のキューを作成することをお勧めします。つまり、スキャンした画像をキューに追加する1つのスレッド(またはプロセス)と、そのキューから画像を削除してサムネイルを作成する別のスレッド/プロセスがあります。このように、2つの操作の相対速度は重要ではありません。

于 2009-08-22T16:04:56.567 に答える