다음을 통해 공유


좌표계 형식

Windows GDI+는 월드, 페이지 및 디바이스의 세 가지 좌표 공간을 사용합니다. 를 호출 myGraphics.DrawLine(&myPen, 0, 0, 160, 80)하면 Graphics::D rawLine 메서드((0, 0) 및 (160, 80)에 전달하는 점이 세계 좌표 공간에 있습니다. GDI+는 화면에 선을 그리려면 먼저 좌표가 변환 시퀀스를 통과해야 합니다. 한 변환은 세계 좌표를 페이지 좌표로 변환하고 다른 변환은 페이지 좌표를 디바이스 좌표로 변환합니다.

왼쪽 위 모서리가 아닌 클라이언트 영역의 본문에 원점이 있는 좌표계로 작업하려고 한다고 가정하겠습니다. 예를 들어, 원점을 클라이언트 영역의 왼쪽 가장자리에서 100픽셀, 클라이언트 영역 위쪽에서 50픽셀로 지정하려고 합니다. 다음 그림에서 이러한 좌표계를 보여줍니다.

레이블이 지정된 좌표 축이 포함된 창의 스크린샷

myGraphics.DrawLine(&myPen, 0, 0, 160, 80), 호출을 하면 다음 그림에 표시된 선을 얻습니다.

이전 창의 스크린샷이지만 원점에서 대각선으로 확장되는 파란색 선

세 개의 좌표 공간에 있는 선의 엔드포인트 좌표는 다음과 같습니다.

Space 엔드포인트 좌표
World (0, 0)~(160, 80)
페이지 (100, 50)~(260, 130)
디바이스 (100, 50)~(260, 130)

 

페이지 좌표 공간의 원점은 클라이언트 영역의 왼쪽 위 모서리에 있습니다. 항상 이 경우가 될 것입니다. 또한 측정 단위가 픽셀이므로, 디바이스 좌표는 페이지 좌표와 동일합니다. 측정 단위를 픽셀이 아닌 다른 단위(예: 인치)으로 설정하면 디바이스 좌표가 페이지 좌표와 달라집니다.

월드 좌표를 페이지 좌표에 매핑하는 변환을 월드 변환 이라고 하며 Graphics 개체에서 유지 관리됩니다. 이전 예제에서 월드 변환은 x 방향의 변환 100개 단위와 y 방향의 50개 단위입니다. 다음 예제에서는 Graphics 개체의 월드 변환을 설정한 다음 해당 Graphics 개체를 사용하여 이전 그림에 표시된 선을 그립니다.

myGraphics.TranslateTransform(100.0f, 50.0f);

myGraphics.DrawLine(&myPen, 0, 0, 160, 80);

페이지 좌표를 디바이스 좌표에 매핑하는 변환을 페이지 변환이라고 합니다. Graphics 클래스는 페이지 변환을 조작하고 검사하는 네 가지 메서드인 Graphics::SetPageUnit, Graphics::GetPageUnit, Graphics::SetPageScaleGraphics::GetPageScale을 제공합니다. Graphics 클래스는 디스플레이 디바이스의 인치당 가로 및 세로 점을 검사하기 위해 Graphics::GetDpiXGraphics::GetDpiY라는 두 가지 메서드를 제공합니다.

Graphics 클래스의 Graphics::SetPageUnit 메서드를 사용하여 측정 단위를 지정할 수 있습니다. 다음 예제에서는 (0, 0)에서 (2, 1)로 선을 그립니다. 여기서 점(2, 1)은 오른쪽으로 2인치, 지점에서 1인치 아래로(0, 0)입니다.

myGraphics.SetPageUnit(UnitInch);

myGraphics.DrawLine(&myPen, 0, 0, 2, 1);

참고

펜을 생성할 때 펜 너비를 지정하지 않으면 이전 예제에서는 너비가 1인치인 선을 그립니다. 두 번째 인수에서 펜 생성자에 너비를 지정할 수 있습니다.

Pen myPen(Color(255, 0, 0, 0), 1/myGraphics.GetDpiX()).

 

디스플레이 디바이스에 가로 방향으로 인치당 96개의 점과 세로 방향으로 인치당 96개의 점이 있다고 가정하면 이전 예제의 선 엔드포인트에는 세 개의 좌표 공간에 다음 좌표가 있습니다.

Space 엔드포인트 좌표
World (0, 0)~(2, 1)
페이지 (0, 0)~(2, 1)
디바이스 (0, 0, to (192, 96)

 

월드 변환과 페이지 변환을 결합하여 다양한 효과를 얻을 수 있습니다. 예를 들어, 측정 단위로 인치를 사용하고 좌표계의 원점이 클라이언트 영역의 왼쪽 가장자리에서 2인치, 클라이언트 영역 위쪽에서 1/2인 지점에 되려고 한다고 가정합니다. 다음 예제에서는 Graphics 개체의 월드 및 페이지 변환을 설정한 다음(0, 0)에서 (2, 1)로 선을 그립니다.

myGraphics.TranslateTransform(2.0f, 0.5f);
myGraphics.SetPageUnit(UnitInch);
myGraphics.DrawLine(&myPen, 0, 0, 2, 1);

다음 그림에서는 선과 좌표계를 보여줍니다.

축이 왼쪽에 배치되고 레이블이 다르게 지정된 이전 창의 스크린샷이 더 넓습니다.

디스플레이 디바이스에 가로 방향으로 인치당 96개의 점과 세로 방향으로 인치당 96개의 점이 있다고 가정하면 이전 예제의 선 엔드포인트에는 세 개의 좌표 공간에 다음 좌표가 있습니다.

Space 엔드포인트 좌표
World (0, 0)~(2, 1)
페이지 (2, 0.5)~(4, 1.5)
디바이스 (192, 48)~(384, 144)