フォントは書き込んだ後に動かすよね?
ということで、レイヤを先にはじめることに。
昔、8ビットカラー(256色)をBitBltのラスタオペレーションで透過したな。あれをマスキングじゃなくて、アルファブレンドに使えんかと寝ぼけた事を考えて、やるだけやってみたらやっぱりダメだった。
RGBの値をマスクすることはブレンドすることは違うよね、青が赤にもなるorz
ということで、GetDIBitsしてごりごりブレンドするコードを書く。
DirectDraw時代からこの構成やってるな。今の時代にこんな泥臭いことやってる人はいないだろう。
・・・GBA/NDS HomeBrew向けBMPコンバータとかでやったな。意外にいるかも。
閑話休題。
とりあえず、複数枚のレイヤを重ねるのはまだ先なんだけど、画像表示のロジックを次のように変更。
StretchBltなどAPIを駆使して比較的楽に表示
↓
アルファ値のビットマップを作り、それと合成したものを表示
で、変更したら早速表示が重くなる。↓
アルファ値のビットマップを作り、それと合成したものを表示
InvalidateRect/ValidateRectをがんばって使ってみたところが原因だった。
がんばったコードをほとんど消してInvalidateRect→UpdateWindowで一発更新する形にして更に高速化。
体感的に余裕のある速度になりました。むしろ早くなったorz
それにしても、技術的なことはいっさい書いてないなー。
0 件のコメント:
コメントを投稿