画像を読み込むプログラムは以前紹介しましたが、場合によっては、一枚の画像を分割して読み込みたい事があります。例えば
このような画像は一枚ずつ別ファイルになっているより、このようにまとまっている方が扱いやすいですね。
これを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 -