2.8 이미지를 분할하여 로드
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; } |
실행결과