보간 모드를 사용하여 크기 조정 중 이미지 품질 제어
Graphics 개체의 보간 모드는 Windows GDI+가 이미지를 스케일링(확장 및 축소)하는 방식에 영향을 줍니다. Gdiplusenums.h의 InterpolationMode 열거형은 여러 보간 모드를 정의하며, 그 중 일부는 다음 목록에 표시됩니다.
- InterpolationModeNearestNeighbor
- InterpolationModeBilinear
- InterpolationModeHighQualityBilinear
- InterpolationModeBicubic
- InterpolationModeHighQualityBicubic
이미지를 확대하려면 원본 이미지의 각 픽셀을 더 큰 이미지의 픽셀 그룹에 매핑해야 합니다. 이미지를 축소하려면 원본 이미지의 픽셀 그룹을 더 작은 이미지의 단일 픽셀에 매핑해야 합니다. 이러한 매핑을 수행하는 알고리즘의 효율성이 스케일링된 이미지의 품질을 결정합니다. 더 높은 품질의 스케일링된 이미지를 생성하는 알고리즘은 처리 시간이 더 많이 필요한 경향이 있습니다. 앞의 목록에서 InterpolationModeNearestNeighbor는 가장 낮은 품질 모드이고 InterpolationModeHighQualityBicubic은 최고 품질 모드입니다.
보간 모드를 설정하려면 InterpolationMode 열거형의 멤버 중 하나를 Graphics 개체의 SetInterpolationMode 메서드에 전달합니다.
다음 예제에서는 이미지를 그린 다음 세 가지 보간 모드로 이미지를 축소합니다.
Image image(L"GrapeBunch.bmp");
UINT width = image.GetWidth();
UINT height = image.GetHeight();
// Draw the image with no shrinking or stretching.
graphics.DrawImage(
&image,
Rect(10, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
UnitPixel);
// Shrink the image using low-quality interpolation.
graphics.SetInterpolationMode(InterpolationModeNearestNeighbor);
graphics.DrawImage(
&image,
Rect(10, 250, 0.6*width, 0.6*height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
UnitPixel);
// Shrink the image using medium-quality interpolation.
graphics.SetInterpolationMode(InterpolationModeHighQualityBilinear);
graphics.DrawImage(
&image,
Rect(150, 250, 0.6 * width, 0.6 * height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
UnitPixel);
// Shrink the image using high-quality interpolation.
graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);
graphics.DrawImage(
&image,
Rect(290, 250, 0.6 * width, 0.6 * height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
UnitPixel);
다음 그림에서는 원본 이미지와 세 개의 작은 이미지를 보여줍니다.