質問です。ちょっと長文の上に文章が読み辛いかもですが、よろしくお願いします。開発環境はXP+VC2005EEです。

よくあるテキストと立ち絵で構成されているアドベンチャーゲームを作っているのですが、
表画面に出力する際、画像をαブレンドする手順がよくわかりません。
今のところは、以下の手順で毎フレーム行ってます。

1. バッファ(横640縦480の24bitなので921600byte)を必要な数だけ(立ち絵・立ち絵マスク・背景・裏画面用に4つ)アロケートする
2. BITMAPINFOHEADE構造体を設定する
3. 各メモリDCからGetDIBitsでバッファを取得する
4. 各バッファをアルファブレンドする
5. 裏画面DCにSetDIBitsで出力する
6. WM_PAINTメッセージのところで裏画面DCから表画面へBitBltで描画する

ところがこれが遅い。Pen4 2.53GHzにメモリ512ですが、何故かFPSが15~20ぐらいしか出ませんorz

コメントアウトしてどこが遅いのか試してみたところ、アルファブレンド計算は勿論なのですが、
GetDIBitsやSetDIBitsを2回以上行うと極端にフレームレートが下がっていました(1回増やすだけで10~20程FPSが下がる)。

バッファを一つのDC(例えば背景DC)から一回しか取得せず、そのバッファをアルファブレンドなどをしないで、
そのままSetDIBitsで出力するとFPS60を維持することが出来るのですが、例えばここで立ち絵DCからも
GetDIBitsをするとFPSがガクンと下がるという感じです。

正直どう修正すればいいのか分からないのですが、上記の手順じゃ速度出るわきゃねーだろとか、
もっと効率のいい手順があるとか、何か解決のヒントがございましたら教えて頂けると幸いです。