レーザー照射

 発表会などでは、良く赤いレーザーの指示器(スクリーンなどに小さな赤い点を映し出すもの)が使われます。これをビットマップに対してやる時には、一部に「光」を当てる処理になるでしょう。今回は、この光を当てる処理をやってみました。これは、レーザーだけでなくスポットライトなどにも応用できますので、試してみてください。

光を当てる処理

 光を当てる、という事はその部分の光の「成分」を増加させる事を意味します。例えば、ある点のRGBが(128,128,128)だとすると、そこに赤い光を当てるならR成分を増やして(192,128,128)などとするわけです。当然、増やす量を大きくするほど「強い」光になります。ただし、RGBの「最大値」には注意してください。24ビットのDIBなら最大値は255ですから、強い光を当てる時には無条件に255にする、という手もありますね。
 以下の例は、ビットマップlpWorkの(iX, iY)から16ピクセル四方に赤い光(R+128)を当てる処理です。

  for (i=iY;i<iY+16;i++) /* レーザー照射(周辺部) */
      for (j=iX;j<iX+16;j++)
          if (lpWork[j*3+i*iLength+2]>127)
              lpWork[j*3+i*iLength+2]=255;
          else
              lpWork[j*3+i*iLength+2]+=128;

プログラム

 今回のプログラムは、ビットマップ(48×48以上のフルカラーBMP)を読み込んで赤いレーザーを当てて行きます。まず「読み込み」ボタンでビットマップを読み込んでから、カーソルキーでレーザーの点を動かしてみましょう。

 プログラムでは、読み込んだビットマップをバッファ(lpBMP)に保存しておいて、毎回表示用ビットマップ(lpWork)にコピーしその上にレーザーを重ねてから表示しています。

プログラムソース表示

戻る