다음을 통해 공유


방법: 배율 조정 시 보간 모드를 사용하여 이미지 품질 관리

업데이트: 2007년 11월

Graphics 개체의 보간 모드는 GDI+에서 이미지의 배율을 조정(늘임 및 줄임)하는 데 영향을 줍니다. InterpolationMode 열거형에서는 몇 가지의 보간 모드를 정의하며 다음 목록에 그 중 일부가 나와 있습니다.

이미지를 확대하려면 원래 이미지에 있는 각 픽셀을 큰 이미지에 있는 픽셀의 그룹으로 매핑해야 합니다. 이미지를 축소하려면 원래 이미지에 있는 픽셀의 그룹을 작은 이미지에 있는 단일 픽셀로 매핑해야 합니다. 이러한 매핑을 수행하는 알고리즘이 효율적인지에 따라 배율을 조정한 이미지의 품질이 결정됩니다. 품질이 더 나은 배율 조정된 이미지를 만드는 알고리즘일수록 처리 시간은 더 오래 걸립니다. 위 목록에서 NearestNeighbor는 가장 품질이 낮은 모드이고 HighQualityBicubic는 가장 품질이 우수한 모드입니다.

보간 모드를 설정하려면 InterpolationMode 열거형의 멤버 중 하나를 Graphics 개체의 InterpolationMode 속성에 지정합니다.

예제

아래 예제에서는 이미지를 그린 다음 세 가지의 보간 모드를 사용하여 이미지를 축소합니다.

아래 그림에서는 원래 이미지 및 세 종류의 작은 이미지를 보여 줍니다.

다양한 보간 설정의 이미지

Dim image As New Bitmap("GrapeBunch.bmp")
Dim width As Integer = image.Width
Dim height As Integer = image.Height

' Draw the image with no shrinking or stretching. Pass in the destination
' rectangle (2nd argument), the upper-left corner (3rd and 4th arguments),
' width (5th argument),  and height (6th argument) of the source 
' rectangle.
e.Graphics.DrawImage( _
    image, _
    New Rectangle(10, 10, width, height), _
    0, _
    0, _
    width, _
    height, _
    GraphicsUnit.Pixel, _
    Nothing)

' Shrink the image using low-quality interpolation. 
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor

' Pass in the destination rectangle, and the upper-left corner, width, 
' and height of the source rectangle as above.
e.Graphics.DrawImage( _
image, _
New Rectangle(10, 250, CInt(0.6 * width), CInt(0.6 * height)), _
0, _
0, _
width, _
height, _
GraphicsUnit.Pixel)

' Shrink the image using medium-quality interpolation.
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear

' Pass in the destination rectangle, and the upper-left corner, width, 
' and height of the source rectangle as above.
e.Graphics.DrawImage( _
image, _
New Rectangle(150, 250, CInt(0.6 * width), _
CInt(0.6 * height)), _
0, _
0, _
width, _
height, _
GraphicsUnit.Pixel)

' Shrink the image using high-quality interpolation.
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic

' Pass in the destination rectangle, and the upper-left corner, width, 
' and height of the source rectangle as above.
e.Graphics.DrawImage( _
    image, _
    New Rectangle(290, 250, CInt(0.6 * width), CInt(0.6 * height)), _
    0, _
    0, _
    width, _
    height, _
    GraphicsUnit.Pixel)

Image image = new Bitmap("GrapeBunch.bmp");
int width = image.Width;
int height = image.Height;

// Draw the image with no shrinking or stretching.
e.Graphics.DrawImage(
    image,
    new Rectangle(10, 10, width, height),  // destination rectangle  
    0,
    0,           // upper-left corner of source rectangle
    width,       // width of source rectangle
    height,      // height of source rectangle
    GraphicsUnit.Pixel,
    null);

// Shrink the image using low-quality interpolation. 
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
e.Graphics.DrawImage(
   image,
    new Rectangle(10, 250, (int)(0.6 * width), (int)(0.6 * height)),
    // destination rectangle 
    0,
    0,           // upper-left corner of source rectangle
    width,       // width of source rectangle
    height,      // height of source rectangle
    GraphicsUnit.Pixel);

// Shrink the image using medium-quality interpolation.
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear;
e.Graphics.DrawImage(
    image,
    new Rectangle(150, 250, (int)(0.6 * width), (int)(0.6 * height)),
    // destination rectangle 
    0,
    0,           // upper-left corner of source rectangle
    width,       // width of source rectangle
    height,      // height of source rectangle
    GraphicsUnit.Pixel);

// Shrink the image using high-quality interpolation.
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
e.Graphics.DrawImage(
    image,
    new Rectangle(290, 250, (int)(0.6 * width), (int)(0.6 * height)),
    // destination rectangle 
    0,
    0,           // upper-left corner of source rectangle
    width,       // width of source rectangle
    height,      // height of source rectangle
    GraphicsUnit.Pixel);

코드 컴파일

앞의 예제는 Windows Forms에서 사용해야 하며 Paint 이벤트 처리기의 매개 변수인 PaintEventArgs e를 필요로 합니다.

참고 항목

기타 리소스

이미지, 비트맵 및 메타파일

이미지, 비트맵, 아이콘 및 메타파일 사용