画像を普通にそのままのサイズで表示することは出来ました。今度は回転と拡大縮小の方法をみてみましょう。
画像を回転・拡大縮小表示する関数は DrawRotaGraph関数 です。DrawRotaGraph関数 のリファレンスを確認 してみましょう。
宣言 | int DrawRotaGraph( int x, int y, double ExtRate, double Angle, int GrHandle , int TransFlag ) ; |
概略 | メモリに読みこんだグラフィックの回転描画 |
引数 | x , y : グラフィックを描画する領域の中心座標 ExtRate : 拡大率(1.0で等倍) Angle : 描画角度(ラジアン指定) GrHandle : 描画するグラフィックの識別番号(グラフィックハンドル) TransFlag : 透過色が有効か、フラグ(TRUEで有効FALSEで無効) |
前章で紹介した、DrawGraph関数より、2つ引数が多いですね。
とは言え、真ん中に拡大率の指定、角度の指定、の引数が増えただけで後は変わりありません。
まず、第三引数は実数型で拡大率を指定します。
ここで、注意が必要なのが、DrawGraph関数は指定した位置が画像の左上になっていたことに対して・・・
DrawRotaGraph関数 は指定した位置が中央になります。
これは拡大率に2.0を指定した時の例です。指定した位置が中心点となり、中心点は変わらず大きさが2倍になります。
第四引数は角度を実数型で指定します。ここでもまた注意が必要です。
y軸は下が正でしたね。中学の時に習った座標系とは上下が逆になっているので、角度も反対回りになります。
これは、45゜回転した時の図です。0゜の方向であるx軸方向から時計回りに回転します。
また、角度は度数法で指定するのではなく孤度法で指定します。
中学の時、孤度法と度数法の2種類があるのを習ったこと覚えていますか?
円1周を360゜とするのが度数法、円1周を2πとするのが孤度法です。
よって180゜は円周率である3.141592654...となります。
プログラムではよく円周率を
#define PI 3.141592654
などと定義して使います。180゜が PI なのですから、45゜はいくつになりますか?
PI ÷ 4 ですね。
では、拡大も回転もしていない描画と、2倍に拡大し、45゜回転させた描画を2つ並べて描いてみましょう。
#include "DxLib.h" #define PI 3.141592654 int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定 int Handle; // 画像格納用ハンドル Handle = LoadGraph( "画像/キャラクタ00.png" ); // 画像のロード // while(裏画面を表画面に反映, メッセージ処理, 画面クリア) while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){ DrawRotaGraph( 100, 200, 1.0, 0.0, Handle, TRUE ); //画像の描画 DrawRotaGraph( 400, 200, 2.0, PI/4, Handle, TRUE ); //画像の描画 } DxLib_End(); // DXライブラリ終了処理 return 0; }
- Remical Soft -