방법: 자동 배율 조정 없이 성능 향상

GDI+는 이미지를 그릴 때 자동으로 스케일링을 할 수 있으므로, 성능이 저하됩니다. 또는 대상 사각형의 치수를 DrawImage 메서드로 전달하여 이미지의 스케일링을 제어할 수 있습니다.

예를 들어, DrawImage 메서드에 대한 다음 호출은 (50, 30)의 왼쪽 위 모서리를 지정하지만, 대상 사각형을 지정하지는 않습니다.

e.Graphics.DrawImage(image, 50, 30);  // upper-left corner at (50, 30)
e.Graphics.DrawImage(image, 50, 30) ' upper-left corner at (50, 30)

이것은 필요한 인수 수를 볼 때, DrawImage 메서드의 가장 쉬운 버전이지만, 반드시 가장 효율적인 것은 아닙니다. GDI+에서 사용하는 해상도(일반적으로 96 dpi)가 Image 개체에 저장된 해상도와 다르면, DrawImage 메서드가 이미지를 스케일링합니다. 예를 들어, Image 개체의 너비가 216픽셀이고 저장된 수평 해상도 값이 72 dpi라고 가정합니다. 216/72는 3이기 때문에, DrawImage가 이미지를 스케일링하여 96 dpi에서 너비가 3인치가 됩니다. 즉, DrawImage는 너비가 96x3 = 288픽셀인 이미지를 표시합니다.

화면 해상도가 96 dpi와 다르더라도, GDI+는 화면 해상도가 96 dpi였던 것처럼 이미지를 스케일링할 것입니다. 이것은 GDI+ Graphics 개체가 디바이스 컨텍스트와 연결되었기 때문이며, GDI+가 화면 해상도에 대한 디바이스 컨텍스트를 쿼리할 때 결과는 실제 화면 해상도와 상관 없이, 보통 96입니다. DrawImage 메서드에 대상 사각형을 지정하여 자동 스케일링을 피할 수 있습니다.

예제

다음 예제에서는 동일한 이미지를 두 번 그립니다. 첫 번째 경우 대상 사각형의 너비와 높이가 지정되지 않고 이미지는 자동으로 스케일링됩니다. 두 번째 경우 대상 사각형의 너비와 높이(픽셀 단위로 측정)는 원래 이미지의 너비 및 높이와 동일하게 지정됩니다. 다음 그림에서는 렌더링된 이미지를 두 번 보여줍니다.

크기가 조정된 텍스처의 이미지를 보여주는 스크린샷.

Image image = new Bitmap("Texture.jpg");

e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height);
Dim image As New Bitmap("Texture.jpg")

e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height)

코드 컴파일

앞의 예제는 Windows forms에서 사용하도록 설계되었으며 PaintEventArgs 이벤트 처리기의 매개 변수인 ePaint가 필요합니다. Texture.jpg를 시스템에서 유효한 이미지 이름 및 경로로 바꿉니다.

참고 항목