방법: 자동 배율 조정 없이 성능 향상
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 이벤트 처리기의 매개 변수인 e
Paint가 필요합니다. Texture.jpg를 시스템에서 유효한 이미지 이름 및 경로로 바꿉니다.
참고 항목
.NET Desktop feedback
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기