ホームへ戻る

 2.8章 画像を分割して読み込む

 RPGツクールなどを利用した事がある人はマップチップやキャラチップという素材をみたことがあるかもしれません。



このような画像です。町や人を表示する素材は数が多いので、一つずつ異なるファイルにするとすごい数になってしまいます。

そのため、キャラチップは上の画像のようにひとまとめにしてあります。

この画像を読み込むときは LoadGraph関数ではなく、分割読み込み関数である LoadDivGraph関数 を使用します。

LoadDivGraph関数 のリファレンスを確認 してみましょう。

宣言 int LoadDivGraph( char *FileName , int AllNum ,
             int XNum , int YNum , int XSize , int YSize , int *HandleBuf ) ;


概略 画像ファイルのメモリへの分割読みこみ

引数 FileName   : 分割読み込みする画像ファイル文字列のポインタ
AllNum    : 画像の分割総数
XNum ,YNum  : 画像の横向きに対する分割数と縦に対する分割数
SizeX ,SizeY : 分割された画像一つの大きさ
HandleBuf   : 分割読み込みして得たグラフィックハンドルを
        保存するint型の配列へのポインタ


関数仕様の説明だけでは分かりにくいので、画像と合わせて説明します。



この画像は、(32 x 32)ピクセルのキャラの画像が横4個、縦4個あつまった計16個の画像です。

16個の画像を分割して LoadGraph関数 で取得したような画像ハンドルを取得するには

int image[16];
LoadDivGraph( "ファイルの場所" , 16 , 4 , 4 , 32 , 32 , image ) ;

このように書きます。引数は

第一引数:ファイル名
第二引数:画像の数
第三引数:横方向の画像の数
第四引数:縦方向の画像の数
第五引数:画像一つの横サイズ
第六引数:画像一つの縦サイズ
第七引数:画像ハンドルを格納する配列のアドレス

を渡します。すると
[0] [1] [2] [3]
[4] [5] [6] [7]
[8] [9] [10] [11]
[12] [13] [14] [15]


このような順番で画像ハンドルが image に格納されます。

表示する時は今まで通り、DrawGraph関数 等で描画します。

では画像ハンドルの8番を表示するサンプルを書いてみますので、確認してみましょう。


#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

	int image[16];
	LoadDivGraph( "画像/キャラクタ10.png" , 16 , 4 , 4 , 32 , 32 , image ); // 画像の分割読み込み

        // while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){

                DrawGraph( 0, 0, image[8], TRUE );      // 画像を表示

        }

        DxLib_End(); // DXライブラリ終了処理
        return 0;
}

実行結果


→分からないことがあれば掲示板で質問して下さい


- Remical Soft -