DX라이브러리

2.8 이미지를 분할하여 로드

캡슐리어 2014. 12. 23. 14:51

2.8 이미지를 분할하여 로드


RPG Maker를 사용해본일이 있다면 이해가 쉬울 것이다. 맵칩 또는 캐릭터칩과 비슷한 방식이다.



이와 같은 이미지를 활용할 수 있다. 표현할 이미지가 많은경우 각각의 파일로 나뉘면 파일 개수가 너무 많아지게 된다. 때문에 위 그림과 같이 한개의 이미지 파일에 합친 이후 분할하여 이미지를 로드할 수 있다. 이 때 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형 배열의 포인터


위에서 보았던 이미지를 예로 들어 아래의 예제처럼 사용 가능하다.


int image[16];

LoadDivGraph( "파일명" , 16 , 4 , 4 , 32 , 32 , image ) ;


각 인수의 의미는 다음과 같다.


제 1인수 : 파일명(경로포함)

제 2인수 : 이미지의 수

제 3인수 : 횡방향 이미지의 수

제 4인수 : 종방향 이미지의 수

제 5인수 : 이미지 한개의 횡 사이즈

제 6인수 : 이미지 한개의 종 사이즈

제 7인수 : 이미지 핸들값을 저장할 배열 포인터


이는 다음과 같은 순번으로 핸들값을 부여 받게 된다.



이미지를 그려줄 때에는 지금까지와 동일하게 DrawGraph함수를 이용한다. 다음 예제는 8번째 그림을 표시하는 예제이다.


#include <DxLib.h>


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){

ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );


int image[16];

LoadDivGraph( "image/character_10.png" , 16 , 4 , 4 , 32 , 32 , image ); // 이미지 분할 로드


        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){


                DrawGraph( 100, 100, image[8], TRUE );


        }


        DxLib_End();

        return 0;

}


실행결과