GDI+에서 이미지 자르기 및 배율 조정

Graphics 클래스의 DrawImage 메서드를 사용하여 벡터 이미지와 래스터 이미지를 그리고 배치할 수 있습니다. DrawImage는 오버로드된 메서드이므로, 인수와 함께 공급할 수 있는 여러 가지 방법이 있습니다.

DrawImage 변형

DrawImage 메서드의 한 변형은 BitmapRectangle을 받습니다. 사각형은 그리기 작업의 대상을 지정합니다. 즉, 이미지를 그릴 사각형을 지정합니다. 대상 사각형의 크기가 원래 이미지의 크기와 다른 경우 대상 사각형에 맞게 이미지가 스케일링됩니다. 다음 코드 예제에서는 동일한 이미지를 세 번 그리는 방법을 보여줍니다. 한 번은 스케일링 없이, 한 번은 확장으로, 한 번은 압축을 사용합니다.

Bitmap myBitmap = new Bitmap("Spiral.png");

Rectangle expansionRectangle = new Rectangle(135, 10,
   myBitmap.Width, myBitmap.Height);

Rectangle compressionRectangle = new Rectangle(300, 10,
   myBitmap.Width / 2, myBitmap.Height / 2);

myGraphics.DrawImage(myBitmap, 10, 10);
myGraphics.DrawImage(myBitmap, expansionRectangle);
myGraphics.DrawImage(myBitmap, compressionRectangle);
Dim myBitmap As New Bitmap("Spiral.png")

Dim expansionRectangle As New Rectangle(135, 10, _
   myBitmap.Width, myBitmap.Height)

Dim compressionRectangle As New Rectangle(300, 10, _
   CType(myBitmap.Width / 2, Integer), CType(myBitmap.Height / 2, Integer))

myGraphics.DrawImage(myBitmap, 10, 10)
myGraphics.DrawImage(myBitmap, expansionRectangle)
myGraphics.DrawImage(myBitmap, compressionRectangle)

다음 그림은 세 개의 그림을 보여 줍니다.

스케일링

DrawImage 메서드의 일부 변형에는 원본 사각형 매개 변수와 대상 사각형 매개 변수가 있습니다. 원본 사각형 매개 변수는 그릴 원본 이미지의 부분을 지정합니다. 대상 사각형은 이미지의 해당 부분을 그릴 사각형을 지정합니다. 대상 사각형의 크기가 원본 사각형의 크기와 다른 경우 그림의 크기가 대상 사각형에 맞게 스케일링됩니다.

다음 코드 예제에서는 Runner.jpg 파일에서 Bitmap을 생성하는 방법을 보여 줍니다. 전체 이미지는 스케일링 없이 (0, 0)에서 그려집니다. 그런 다음, 이미지의 작은 부분이 두 번 그려집니다. 한 번은 압축으로, 한 번은 확장으로 그려집니다.

Bitmap myBitmap = new Bitmap("Runner.jpg");

// One hand of the runner
Rectangle sourceRectangle = new Rectangle(80, 70, 80, 45);

// Compressed hand
Rectangle destRectangle1 = new Rectangle(200, 10, 20, 16);

// Expanded hand
Rectangle destRectangle2 = new Rectangle(200, 40, 200, 160);

// Draw the original image at (0, 0).
myGraphics.DrawImage(myBitmap, 0, 0);

// Draw the compressed hand.
myGraphics.DrawImage(
   myBitmap, destRectangle1, sourceRectangle, GraphicsUnit.Pixel);

// Draw the expanded hand.
myGraphics.DrawImage(
   myBitmap, destRectangle2, sourceRectangle, GraphicsUnit.Pixel);
Dim myBitmap As New Bitmap("Runner.jpg")

' One hand of the runner
Dim sourceRectangle As New Rectangle(80, 70, 80, 45)

' Compressed hand
Dim destRectangle1 As New Rectangle(200, 10, 20, 16)

' Expanded hand
Dim destRectangle2 As New Rectangle(200, 40, 200, 160)

' Draw the original image at (0, 0).
myGraphics.DrawImage(myBitmap, 0, 0)

' Draw the compressed hand.
myGraphics.DrawImage( _
   myBitmap, destRectangle1, sourceRectangle, GraphicsUnit.Pixel)

' Draw the expanded hand. 
myGraphics.DrawImage( _
   myBitmap, destRectangle2, sourceRectangle, GraphicsUnit.Pixel)

다음 그림에서는 스케일링되지 않은 이미지와 압축 및 확장된 이미지 부분을 보여 줍니다.

자르기 및 스케일링

참고 항목