ホームへ戻る

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

 画像を読み込むプログラムは以前紹介しましたが、場合によっては、一枚の画像を分割して読み込みたい事があります。例えば



このような画像は一枚ずつ別ファイルになっているより、このようにまとまっている方が扱いやすいですね。

これを4x4の16個の画像に分割してみましょう。

分割した後は、今までのように

int handle = LoadGraph("ファイル.png");

で取得したhandle値と同じ要領で使用可能です。

画像を分割してロードする関数は 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型の配列へのポインタ
戻り値  0:成功
  -1:エラー発生

引数は多いですが、以下のようになっています。

第一引数: ファイル名
第二引数: 分割画像総数
第三引数: X方向の分割数
第四引数: Y方向の分割数
第五引数: 1画像のX方向のサイズ
第六引数: 1画像のY方向のサイズ
第七引数: 画像ハンドルを格納する配列

また、上の画像を横x縦を4x4の16個に分割すると、格納した配列要素へは以下のように入ります。

[0] [1] [2] [3]
[4] [5] [6] [7]
[8] [9] [10] [11]
[12] [13] [14] [15]

[0]の位置の画像と[10]の位置の画像を表示するサンプルを以下に示します。
画像は4x4個の計16個、そして一つの画像サイズは32x32ピクセルとなっています。


#include "DxLib.h"

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

        int Image[16];//16個の画像を格納する配列
        LoadDivGraph( "画像/キャラクタ10.png" , 16 , 4 , 4 , 32 , 32 , Image ) ;//画像を16個に分割してImage配列に保存

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

                DrawGraph( 0,   0, Image[ 0], TRUE  ) ;
                DrawGraph( 0, 100, Image[10], TRUE  ) ;

        }

        DxLib_End();
        return 0;
}

実行結果


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


- Remical Soft -