5章.BMP画像を拡大縮小させる
1999.6.27

4章で説明した画像の移動を理解できれば拡大縮小は簡単です。
まずは次のプログラムを実行してみてください。
BMPファイルが横方向にだんだん狭くなってゆくプログラムです。


  CH=G@SETUP( 640 , 480 , 16 , 0 )        //画面初期化
  G@CHRCLEAR(CH)                          //画面クリア
  G@FLIP( )                               //フリップ
  G@CHRCLEAR(CH)                          //画面クリア
  BM=G@CHRLOAD("TEST.BMP")                //画像読み込み
  LOOP
    FOR DX = 0 TO 367 
      G@CHRRECT( CH , 0 , 0 , 367-DX , 191 )  //コピー先の矩形を指定
      G@CHRCOPY( BM , CH )                    //画像を画面にコピー
      G@FLIP( )                               //フリップ
    NEXT
  ENDLOOP

テスト用画像
TEST.BMP



1〜5行目は、画面の初期化とBMPファイルの読み込みます。
6行目横方向に狭くして行きます。
処理は簡単で、7〜11行目のFOR−NEXTで、DX変数を0〜367の範囲でカウントを進め、BMPのコピー先の幅に同カウンタを割り当てています。

次にもう少高度なプログラムを作ってみます。X=184、Y=96の座標を画像の中心として画像を拡大率0%〜100%で拡大して行きます。
説明するよりも、実行してみて実際の動作を見て下さい。基本的な考え方は上と同じですので理解しやすいと思います。注意する所は、FOR−NEXTは拡大率0%〜100%でループしている事です。


  CH=G@SETUP( 640 , 480 , 16 , 0 )        //画面初期化
  G@CHRCLEAR(CH)                          //画面クリア
  G@FLIP( )                               //フリップ
  G@CHRCLEAR(CH)                          //画面クリア
  BM=G@CHRLOAD("TEST.BMP")                //画像読み込み
  LOOP
    FOR DD = 0 TO 100
      MX = (184*DD/100)
      MY = ( 96*DD/100)
      G@CHRRECT( CH , 184-MX , 96-MY , 184+MX , 96+MY )  //コピー先の矩形を指定
      G@CHRCOPY( BM , CH )                    //画像を画面にコピー
      G@FLIP( )                               //フリップ
    NEXT
  ENDLOOP

テスト用画像
TEST.BMP