4.画像の単純描画


『描画の基礎』

 概念の説明はこの程度にして実際のプログラムを見ながら描画の説明をしてみます。以下に基礎となるプログラムを載せますので実行してみてください。テキストファイルに以下のプログラムを転写したものと、テスト用画像(TEST.BMP)を同一のフォルダに配置し、プログラムを実行します。「ESC」を押す事でプログラムを終了します。

CH = G@SETUP( 640 , 480 , 16 , 1 )      //画面初期化
BM = G@CHRLOAD( "TEST.BMP" )            //画像読み込み
G@CHRCOPY( BM , CH )                    //画像を画面にコピー
G@FLIP( )                               //フリップ
LOOP
  S@WAIT( )                             //システムウェイト
ENDLOOP

<<プログラム&テスト画像のダウンロード>>

上のような実行結果になります。

まずは、上記のプログラムを簡単に説明します。
  1. G@SETUP関数で、画面を使用する為の準備を行います。
  2. G@CHRLOAD関数でBMP画像を読み込みます。
  3. G@CHRCOPY関数で読み込んだBMP画像を画面にコピーします。
  4. G@FLIP関数で画面をモニターに表示します。
  5. LOOP〜ENDLOOPは、LOOPとENDLOOPの間をくり返し実行させています。
  6. S@WAITは、システムウェイトを行う。

今回のポイントは1〜4です。5,6は画面の処理にはまったく関係ありません。これはプログラムが画像を描画した直後で停止しESCキーを押したらプログラムを終了するための処理であり、無ければプログラムは描画直後に終了するだけです。まあ、おまじないだと思ってここでは無視してください。
まず、1のG@SETUP関数は使用する画面のサイズ、色数、モードを指定し画面の準備をするものです。画像を扱うプログラムを作るときにはプログラムの最初で1度だけ実行しておいて下さい。この関数の結果を変数(上の例ではCH )に代入しておいて下さい。この変数は画面をキャラクタとして制御するときのキーワードになります。
2のG@CHRLOAD関数は、画像ファイルを読み込む機能です。上の例では"TEST.BMP"を読み込んでいます。この関数の結果を変数(上の例ではBM )に代入しておいて下さい。この変数は読み込んだ画像をキャラクタとして制御するときのキーワードになります。
3のG@CHRCOPY関数は1番目の引数に指定したキャラクタを2番目の引数で指定したキャラクタにコピーする機能です。この際、画面のサイズと読み込んだキャラクタのサイズが異なる場合には、コピー元(1番目の引数)がコピー先(2番目の引数)にぴったりと収まるように拡大縮小を行いコピーを行います。まあ実際の開発ではこれだけの機能では不十分でしょう。プログラムを少し追加することでもっと柔軟な描画を行うことが出来るのですが、これはまた後で説明します。
ところで、G@CHRCOPY関数でコピーしてもそれだけでは画面に画像は表示されません。画面に表示させるには、コピー後にG@FLIP関数を実行する必要があります。これには理由があります。一言でいえば「描いている最中を見られたくない」からです。今回のように1枚のキャラクタを表示するだけならば描いている時間は一瞬ですが、実際のプログラムでは複数の画像を重ねて1コマの画面を完成させてるため、コピーした内容が直接画面に表示されると、描いている最中をユーザーに見られる事になります。これはなんともみっともない状況です。そこで、1コマ分の画面が描き終わった時に画面に表示するようにするのです。それがG@FLIP関数の意味になります。