|
3章.フルスクリーン画面にBMP画像を単純に表示する2(&画面の説明)
|
||||||
|
1999.5.17
|
||||||
1章と2章でこちらで用意したBMP画像を表示しましたが、題目で「単純に表示する」と書いておきながら、BMP画像をモニターいっぱいになるように拡大して表示している事に気づかれたでしょうか? モニターのサイズが横640dot、縦480dotであるのに対し、こちらで用意したBMP画像は、縦368dot、横192dotしかありません。しかし、1章と2章のサンプルプログラムでは、モニターいっぱいにBMP画像が拡大されて表示されます。 上記の動作を理解するには、G@CHRCOPY関数に関する仕様を知る事で解決します。また、同動作の理解は、BMP画像を自在に拡大縮小させて表示するテクニックの理解に役立ちます。 G@CHRCOPY関数は、「指定したコピー元の画像を、指定したコピー先の画像にコピーを行う」機能を実現していますが、同コピー処理ではコピー元の画像の一部分だけをコピーするという器用な指定が出来ます。 詳しく書くと、G@CHRCOPY関数は「コピー元となる画像の指定の範囲を、コピー先となる画像の指定の範囲にコピーを行う」機能を実現しているのです。なお、ここでいう範囲とは矩形(四角い範囲)の事です。 もし、コピー元の範囲とコピー先の範囲のサイズが異なる場合は、コピーもとの画像を拡大縮小で調整して、コピー先の範囲に収まるように処理をしてくれます。 G@SETUP関数で生成した直後の画面(モニター)や、G@CHRLOAD関数でで読み込んだ直後の画像は、画面及び画像の最大サイズを初期範囲として設定しています。 その為、1章と2章のサンプルプログラムでは、モニターのサイズよりも小さいBMP画像をモニターいっぱいに拡大して表示しているのです。 拡大させずに、原寸大でBMP画像をモニターに表示する方法を2つ説明します。 1つ目は、コピー元の範囲とコピー先の範囲のサイズを合わせる方法です。サイズが合わないから拡大縮小で調整されるのですから、サイズを合わせれば良いのです。 調整はG@CHRRECT関数を使用します。コピー元及びコピー先の範囲は、正方形の矩形であり、G@CHRRECT関数で同矩形の左上の座標と右上の座標を指定することで、同矩形を指定します。 例えば、2章のプログラムでBMP画像の左上をモニターの左上に合わせて表示するには、以下のように赤い行を追加します。 よーく見ると、右下が横367dot目、縦191dot目となっていますが、BMP画像のサイズは縦368dot、横192dotなので、一見すると誤りのようです。でも、左上の座標である縦0dot、横0dotから数えると、縦368dot、横192dotのサイズとなっているので誤りではないのです。 CH=G@SETUP( 640 , 480 , 16 , 0 ) //画面初期化
BM=G@CHRLOAD("TEST.BMP") //画像読み込み
G@CHRRECT( CH , 0 , 0 , 367 , 191 ) //コピー先の矩形を指定
G@CHRCOPY( BM , CH ) //画像を画面にコピー
G@FLIP( ) //フリップ
G@CHRCOPY( BM , CH ) //画像を画面にコピー
LOOP
G@FLIP( ) //フリップ
ENDLOOP
2つ目は、G@CHRCOPY関数のかわりにG@CHRCOPYF関数を使用する方法です。 同関数は、コピー元とコピー先の範囲が異なっても拡大縮小による調整を行わず、コピー元のサイズでコピーを行います。 例えば、2章のプログラムでは、以下のように赤い行を変更します。 CH=G@SETUP( 640 , 480 , 16 , 0 ) //画面初期化
BM=G@CHRLOAD("TEST.BMP") //画像読み込み
G@CHRCOPYF( BM , CH ) //画像を画面にコピー
G@FLIP( ) //フリップ
G@CHRCOPYF( BM , CH ) //画像を画面にコピー
LOOP
G@FLIP( ) //フリップ
ENDLOOP
|