[HMC]年間5250円で独自ドメイン付属、ウィルスチェックありのレンタルサーバ!
Last update : 2000/09/26
演出&エフェクト 第5回
256色パレットを操作して画像の明度を変更する
サンプルコードのダウンロード
  では、まずサンプルコードをダウンロードし、解凍して下さい。 私はVisual C++6.0でコンパイルしているので、をお持ちの方は Visual C++でプロジェクトファイルを開いて下さい(「effec_05.dsw」をダブルクリックすれば開けます)。 圧縮ファイルに含まれる「effec_05.exe」をダブルクリックし、実行してみて下さい(何かキーを押すと終了します)。 どうでしょう?画面が切り替わり、写真が表示され、その明度が徐々に変わっていくのが解ると思います。
  というわけで、今回はパレットを操作して画像のメイドを変更するぜっ!(壊)
明度のお勉強
  さて、明度を変更するというテクニックはよく見かけますよね? 例えばゲームで何か表示していて、次のシーン(場面)に移りたい場合に、画面を段々暗くし(フェード・アウト) 、画面が真っ暗な間に次の画像を読み込んでおき(まだ表示はしない)準備が終わったら段々明るくしていき(フェード・イン) 新しいシーンが始まる・・・というのがあります。まず、こういったものは「パレットを操作」して明度を変更していると考えて 良いでしょう。というか、256色環境で明度を変更する方法はパレット操作以外まず無いです(近似色検索という解答は未定義)。

  では、パレットをどうやって変化させたらいいか、についでですが、簡単です。明るくしたければ 各RGB値を増やしてやればいいし、暗くしたければRGB値を減らしてやればいいのです。 例えばRGB値が(100,25,30)だとして、1明るくしたいのなら各RGB値に1を足して(101,26,31)という感じ。 ただ、ここで注意してもらいたいのが、各RGB値は0〜255でなければならないと言うことです。255を越えた場合は255、0より小さくなった場合は 0という風にです。あとはこの作業を256色パレット全てに行えばいい・・・はずですが、 パレット0番と255番は白・黒固定色なので、それ以外を全て変更すればいいのです。

  今回はもうちょっと突っ込んでおきましょうかね。例えば
というようなアホな事はしないようにして下さいね。
この意味が解らない人は問題外(爆
今週のコードチェック(壊
今回の主なコードはコレ。

パレットの設定については「
DirectDraw基礎 第6回」でやりました。
また垂直帰線については「DirectDraw基礎 第14回」でやりました。
見て解るとおり、一度画面に写真を表示したら、後はパレットを変更しているだけです。 明度を変更する関数でマクロを使ってしまったので、初心者にはちょっと解りにくいかもしれませんが、 これを機に、マクロの勉強をして下さい(爆。マクロを使うとホント楽なので(^^;

  あ、ちなみにビデオカードによっては、この「パレットを設定」する時間がやたらかかるものがあるので、 「パレットを使えば高速に出来る!」とか思いこまないようにしてください。