4

私が作成した .NET CF アプリケーションの機能の 1 つは、リモート カメラからフレームを取得することです。フレームは単一の jpeg 画像として取得され、利用可能な場合は画面に表示されます。

それは十分な解決策でしたが、コンストラクターを使用してストリームをImageオブジェクトに変換するのに必要な時間が、ストリームをダウンロードするのに必要な時間よりもはるかに長いという事実は好きではありません。Bitmap()

この問題について検索するためにいくつかのブログを閲覧したところ、一部の開発者が、いくつかの検証コードを制御しているように見えるフラグImage.FromStream()を持つメソッドを使用していることがわかりました。が false の場合、変換は劇的に高速になりますvalidateImageDatavalidateImageData

なるほど…と思いましたが、Compact Framework はこのメソッドを実装していません!

それを回避する方法、または少なくともImage不要な遅延なしでストリームをに変換する方法を知っている人はいますか?

4

2 に答える 2

1

これが役立つかどうかはわかりませんが、OpenNETCF.Drawing.Imagingにはストリームから画像を読み取るクラスがありますが、これらはIImageでラップされたcomオブジェクトです。次に、IImage.Drawを使用してビットマップに描画できます。また、デバイス上の大きなjpegの拡大縮小された画像を取得するために使用するGetThumbnailメソッドもあります。

これは、 AlexFeinmanからのブログ投稿です。

于 2009-09-01T23:43:36.080 に答える
1

JPEG のサイズが大きい場合 (1200 x 1600 など)、Bitmap コンストラクターを使用してデバイスで発生している速度の問題の 1 つは、Bitmap のサイズがメモリ内に作成する必要があることです (ビットマップは240 x 320 の画面に表示される場合でも、1200 x 1600 である必要があります)。フルサイズの JPEG ではなく、すでにサイズが 320 X 240 の JPEG を取得できれば、ビットマップの作成時間は大幅に短縮されます。

Bitmap コンストラクター以外に、欠落している FromStream メソッドに代わるものは見つかりませんでした。JPEG 形式に精通している場合、独自の JPEG から BMP へのコンバーターを作成するのはそれほど難しくないと思いますが、Bitmap() よりも高速ではないと思います。

編集: 申し訳ありませんが、240 X 320 の JPEG を 240 X 320 のビットマップに変換する際に、独自のコンバーターが高速にならないことを意味していました。最初にフルサイズのビットマップを作成するステップをスキップできるため、はるかに大きな JPEG を 240 X 320 ビットマップに変換する際に、はるかに高速にできると思います。

于 2008-11-12T23:38:33.930 に答える