コンパクトフレームワーク-Image.FromStreamの実装(ストリーム、ブール、ブール)
-
08-07-2019 - |
質問
私が書いた.NET CFアプリケーションでは、機能の1つはリモートカメラからフレームを取得することです。フレームは単一のjpeg画像として取得され、利用可能なときに画面に表示されます。
これは十分な解決策でしたが、 Bitmap()
を使用してストリームを Image
オブジェクトに変換するのに時間がかかるという事実が気に入らないコンストラクタは、ストリームをダウンロードするのに必要な時間よりもはるかに長い。
この問題を検索するためにいくつかのブログを閲覧したときに、一部の開発者が validateImageData
フラグを持つ Image.FromStream()
メソッドを使用していることがわかりました検証コードを制御します。 validateImageData
がfalseの場合、変換は劇的に高速になります。
良い、私は思った....コンパクトフレームワークはこのメソッドを実装していません!
誰もがそれを回避する方法を知っていますか、少なくともストリームを不必要な遅延なしに Image
に変換する方法はありますか?
解決
これが役立つかどうかはわかりませんが、OpenNETCF.Drawing.Imagingにはストリームから画像を読み取るクラスがありますが、それらはIImageでラップされたcomオブジェクトです。その後、IImage.Drawを使用してビットマップに描画できます。また、デバイス上の大きなjpegのスケーリングされた画像を取得するために使用するGetThumbnailメソッドもあります。
ここはAlex Feinmanからのブログ投稿。
他のヒント
JPEGのサイズが大きい場合(1200 x 1600など)、ビットマップコンストラクターを使用してデバイスで発生する速度の問題の1つは、ビットマップのサイズがメモリ内に作成する必要があることです(ビットマップは、240 x 320の画面に表示される場合でも、1200 x 1600になります)。フルサイズのJPEGではなく、320 X 240のサイズが既に設定されたJPEGを取得できる場合、ビットマップの作成時間ははるかに短くなります。
欠落しているFromStreamメソッドの代わりに、Bitmapコンストラクター以外の代替手段を見つけることができませんでした。 JPEG形式に精通している場合、独自のJPEGからBMPへのコンバーターを作成するのはそれほど難しいことではないと思いますが、Bitmap()よりも高速ではないと思います。
編集:申し訳ありませんが、240 x 320 JPEGを240 x 320ビットマップに変換する際に、独自のロールコンバーターがこれ以上速くないことを意味しました。最初にフルサイズのビットマップを作成するステップをスキップできるため、はるかに大きいJPEGを240 X 320ビットマップに変換する際に、はるかに高速にできると思います。