Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Режим интерполяции объекта графики влияет на способ масштабирования (растяжения и сжатия) изображений Windows GDI+ . Перечисление Интерполяции в Gdiplusenums.h определяет различные режимы интерполяции, некоторые из которых показаны в следующем списке:
- Режим интерполяции ближайшего соседа
- РежимИнтерполяцииБилинейный
- ИнтерполяцияРежимВысокоеКачествоБилинейная
- ИнтерполяцияРежимБикубический
- РежимИнтерполяцииВысокогоКачестваБикубическая
Чтобы растянуть изображение, каждый пиксель в исходном изображении должен быть сопоставлен с группой пикселей в большом изображении. Чтобы уменьшить изображение, группы пикселей в исходном изображении должны быть сопоставлены с одним пикселями в меньшем изображении. Эффективность алгоритмов, выполняющих эти сопоставления, определяет качество масштабируемого изображения. Алгоритмы, создающие более качественные масштабируемые изображения, как правило, требуют больше времени обработки. В предыдущем списке InterpolationModeNearestNeighbor является режимом самого низкого качества, а InterpolationModeHighQualityBicubic — режимом самого высокого качества.
Чтобы задать режим интерполяции, передайте один из элементов перечисления InterpolationMode методу SetInterpolationMode объекта Graphics.
Следующий пример рисует изображение, а затем сжимает изображение с тремя различными режимами интерполяции:
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);
На следующем рисунке показан исходный образ и три небольших изображения.