Bitmapを高速にJPEG変換・保存するには?


2tom  2010-05-25 16:50:44  No: 71671  IP: [192.*.*.*]

現在、スクリーンキャプチャを保存するプログラムを作成しています。
GDI+を使用してBitmap(HBITMAP)をJpegに変換し保存しているのですが、
思うほど速度が出ません…
1回の保存に50msecほどかかる時があります。
安定して30fps(約30msec)の速度で保存したいのですが、
何かいい方法はありますでしょうか?

アドバイス、お願いしますm(__)m

環境
VisualStudio2008(VC)
Windows 7

編集 削除
subaru  2010-05-26 10:06:35  No: 71672  IP: [192.*.*.*]

プログラムに問題がないのであればそれがライブラリの機能の限界なのかもしれません。
Windows 7 でJPEG変換を行うにはGDI+かWIC(Windows Imaging Component)が利用可能です。
もしかしたらWICを使用した方がエンコード速度が速いという可能性はあるかもしれませんが
あまり期待できないような気もします。
昔のPCだとJPEG変換は遅かったような気もするのでマシンパワーに頼る部分も大きいんじゃないでしょうか?

編集 削除
へろり  2010-06-10 16:24:29  No: 71673  IP: [192.*.*.*]

とりあえず、データだけでもビットマップで保持しておいて、
裏でこっそり別スレッドでも走らせて保存させればいいんじゃないでしょうか。

編集 削除
Na^2  2010-07-10 10:39:41  No: 71674  IP: [192.*.*.*]

>1回の保存に50msecほどかかる時があります。
>安定して30fps(約30msec)の速度で保存したいのですが、
30msecという値はどこから来たのですか?

Windowsの企画から算出した上で30msecでいけると言う事でしょうか?


無理やりMS思想からすると、その保存が始まる前にプロセスの優先順位を最高にあげちゃって、終了後元に戻すというのはどうでしょう。。。

無責任な発言すみません。

編集 削除
びびんば  2010-07-11 07:27:43  No: 71675  IP: [192.*.*.*]

>30msecという値はどこから来たのですか?
>Windowsの企画から算出した上で30msecでいけると言う事でしょうか?

30fpsでって事ですから、1秒間に30回保存したい(要求仕様)って事じゃないでしょうか。

1秒間に30回ですから、1000msec / 30回 = 33.3333msec

だから約30msec だと思われますが。

編集 削除
Na^2  2010-07-11 12:53:17  No: 71676  IP: [192.*.*.*]

その様なことですか・・・

サイズも固定であと少し(20mseあるけど)、ですね。
ファイルに書き込む前にseekで書き込むべきbmpファイルサイズまで
一度吹き飛んでから、書き込むってだめですかね。。。。。

編集 削除
はてな  2010-07-11 13:51:08  No: 71677  IP: [192.*.*.*]

>一度吹き飛んでから、書き込むってだめですかね。。。。。
ごめんなさい。吹き飛ぶって何ですか?

少し自分言葉多くないですか?
なにを言ってるのか分かりません。

編集 削除
Na^2  2010-07-17 09:07:08  No: 71678  IP: [192.*.*.*]

すみません反省しています。

逐次ファイルに書き込む場合、そのつど増やしていくという形になるかと
思います。

作成するファイルサイズがわかっている場合Seekでそのサイズを指定
するとファイルの領域が確保されて、書き込みの速度が上がるのでは
ないかと思い書き込んだしだいです。

編集 削除