2011-12-26 14 views
1

メモリバッファ内のJPEGフレームをDirectShow互換のビットマップに素早く変換し、一定のメモリ再割り当てを行わないDelphi 6用の使いやすいJPEGコンバータ(ソースコード)はありますか?私はTBitmapと一緒にデフォルトのJPEGユニットを避けようとしています。なぜなら、すべての変換で新しいビットマップを割り当て、各操作に関連したいくつかの初期化/ティアダウン操作もあるからです。Delphi 6用のJPEGからBitmapへの変換が簡単で、メモリ使用効率が良いですか?

ビットマップに変換し、私のDirectShowフィルタのFillBuffer()呼び出しを行う必要があるRTPサーバーからJPEGフレームを受信します。各フレームは、プリセット設定を使用してビデオキャプチャデバイスからストリーミングされるため、まったく同じサイズとフォーマットになります。したがって、ビットマップを1回だけ割り当ててから、着信JPEGフレームを既存のビットマップメモリ​​領域に変換できれば、1秒間に25回のメモリチャンクの再割り当てや、デルファイの他の補助データオブジェクトのオーバーヘッドを避けることができますTBitmapと一緒にJPEGユニットで使用される変換プロセスで使用されます。

CPU使用の観点からは、高速である必要はありません。わずか1/25秒(1/15に安全)で640×480のJPEGフレーム変換を処理するのに十分速い。メモリ使用量が、あなたは簡単に自分自身を変更することができ、ソースと非常に小さいJPEGデコーダわからない

+0

「Delphi 7の」ヘッダないででコンテンツ内の「Delphi 6」と同期します。 – menjaraz

+0

コンバータはTGraphicから派生する必要がありますか? – menjaraz

+0

'TOleGraphic'を試してみてください。ストリームからjpegをロードし、ビットマップに転送を割り当てます。 (あるいは多分Qを理解できなかったかもしれません...) – kobik

答えて

1

はNanoJPEGです:http://keyj.emphy.de/nanojpeg/

ここ

デルファイ変換:http://www.emix8.org/static.php?page=nanoJpeg

+0

これは良いライブラリのようですが、あなたのポートにはライセンス情報はありません。少なくとも、NanoJpeg.pasや他の場所では見られないので、他の人には使えません。私はNanoJpeg.cがリベラルなBSD形式のライセンスを持っていることを知っていますが、あなたのファイルは派生したものであり、ライセンスは派生した作品に "パススルー"しません。明示的に追加する必要があります。 –

+0

私は今、NanoJpeg.cからライセンス情報をコピーし、NanoJpeg.pasに貼り付けました。もう一度ダウンロードして、それがあなたが望むものかどうかを確認してください。私はそれが非常に安定していることがわかった。 Delphi 6と互換性を持たせるためには、いくつかの小さなものを変更する必要があります(クラス宣言の外にあるprivate型宣言を移動し、 "strict"キーワードはスキップしてください)。 –