2.2 이미지 회전, 확대축소
2.2 이미지 회전, 확대축소
선언 |
int DrawRotaGraph( int x, int y, double ExtRate, double Angle, int GrHandle , int TransFlag ) ; |
기능 |
메모리에 로드한 이미지의 회전 |
인수 |
x , y : 이미지 영역의 중심 좌표 ExtRate : 확대율 (1.0으로 원본크기) Angle : 각도 (라디안 지정) GrHandle : 이미지의 핸들값 TransFlag : 투명도 적용여부 (TRUE 적용, FALSE 비적용) |
DrawGraph함수의 경우 좌표는 위 그림에서와 같이 화면의 좌상단을 (0,0)으로 하여 기준을 잡고 이미지의 좌상단점을 이미지의 위치로 판단하여 처리했다. 하지만 DrawRotaGraph함수는 이미지의 기준점이 좌상단이 아닌 중심이 된다. 아래 그림은 2배 확대시의 예
각도인수를 입력할 때에는 각도를 실수형으로 변경하여 코딩한다. 주의할 점은 회전 방향은 아래의 그림처럼 시계방향이 된다.
또한 각도의 입력은 도수법아닌 호도법을 이용한다. 180도 회전의 경우 1π이며 원주율의 경우 전역변수 또는 PI를 치환하도록 전처리 설정을 통해 표현하게 된다.
ex) #define PI 3.141592654 * 45도의 경우 PI/4 |
다음 예제의 경우 첫번째 이미지는 회전, 확대 모두 적용되지 않은 상태이며 두번째 이미지는 2배확대/45도 회전을 적용한 예제이다.
#include <DxLib.h> #define PI 3.141592654 int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); int Handle; Handle = LoadGraph( "image/character_00.png" ); while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){ DrawRotaGraph( 100, 200, 1.0, 0.0, Handle, TRUE ); //이미지 처리 DrawRotaGraph( 400, 200, 2.0, PI/4, Handle, TRUE ); //이미지 처리 (2배확대, 45도 회전) } DxLib_End(); return 0; } |
실행결과