VC++6 で SDIで任意のビットマップ(グレー)をビューに画像表示しています。
自作アプリケーションの1機能として、輝度の増減を行いたいのです。
(例えば上キーを押していくと画像が明るくなってゆく、みたいな感じです。)
これを実現するには、ビットマップの全画素を変更し直すのでしょうか?
それともラスタオペレーションというものを利用することで可能なのでしょうか?
考え方だけでも、ご教示頂けるとありがたいです。
輝度の増減を行いたいのですか・・・。
GDIなのかDirectXなのか、何でしたいのかは分かりませんが
まず、現在のドット単位の輝度の計算は、RGBの平均値
((R+G+B) / 3)
で求まります。
つまり、輝度を上げたければ、RGB値を均等に上げてやれば可能です。
>ビットマップの全画素を変更し直すのでしょうか?
その方が良いと思います。
DirectXを使っている場合は、
DirectDrawのガンマコントロールで可能です。
(ハードウェアが対応していればの話ですが・・・。)
私が考えるやり方は2通りで、
白とアルファーブレンディングを計算する方法と、
単純にRGBにある一定の値を足してやる方法です。
ラスタオペレーションでは、見たことが無いので、
多分そういう機能はありません。(自信は無いけど・・・。)
ビットマップがグレースケールであれば、256色DIBにしてカラー
テーブルを切り替える、という手もあります(画像全体を明るく
するなら、「明るいカラーテーブル」に切り替える)。
ラスタオペレーションでも適当な背景画像を用意して合成したり
すればできるかもしれませんが、グレースケールであればカラー
テーブルを変えることで「各ピクセルが持っている数値の意味」
を一気に変更した方が効率的でしょう。
宍戸さんの、カラーテーブル切替法で実現できました。
(公開ソースを参考にさせていただきました。)
ブタゴリラさんも回答ありがとうございます。
画像がぽわわぁぁと明るくなったりする様は見てて感動モンでした・・
ありがとうございました!