Show / Hide Table of Contents

Практическое руководство. Использование режима интерполяции для управления качеством изображений при масштабировании

Режим интерполяции Graphics влияет на способ GDI+ масштабирует (растягивает и сжимает) изображения. InterpolationMode Перечисление определяет различные режимы интерполяции, некоторые из которых приведены в следующем списке:

  • NearestNeighbor

  • Bilinear

  • HighQualityBilinear

  • Bicubic

  • HighQualityBicubic

Чтобы растянуть изображение, каждый пиксель исходного изображения должен быть сопоставлен группе точек увеличенного изображения. Чтобы сжать изображение, группы точек исходного изображения должны сопоставляться отдельным точкам уменьшенного изображения. Эффективность алгоритмов, которые выполняют эти сопоставления определяет качество масштабированное изображение. Алгоритмы, создающие масштабированные изображения более высокого качества, как правило, требуют большего времени обработки. В приведенном выше списке NearestNeighbor режим низкое качество и HighQualityBicubic режим высочайшего качества.

Чтобы задать режим интерполяции, назначить один из членов InterpolationMode перечисления InterpolationMode свойство Graphics объекта.

Пример

В следующем примере изображение рисуется и затем сжимается с использованием трех различных способов интерполяции.

Ниже показан исходный образ и три меньшего размера изображения.

Снимок экрана, показывающий изображение с отличными параметрами вставки.

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 и требует PaintEventArgs e, который является параметром Paint обработчик событий.

См. также

  • Работа с растровыми и векторными изображениями с использованием классов Image, Bitmap и Metafile
  • Работа с растровыми и векторными изображениями
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX