Поделиться через


Практическое руководство. Обрезка и масштабирование изображений

Обновлен: Ноябрь 2007

Класс Graphics включает различные методы DrawImage, некоторые из которых принимают параметры "исходный прямоугольник" и "прямоугольник назначения", используемые для обрезки и масштабирования изображений.

Пример

В следующем примере создается объект Image на основе файла Apple.gif. Этот код рисует изображение яблока целиком, используя его фактический размер. Затем вызывается метод DrawImage объекта Graphics для рисования фрагмента изображения яблока в прямоугольнике назначения, имеющем больший размер, чем исходное изображение яблока.

Метод DrawImage определяет, какой именно фрагмент изображения яблока выводить на экран, анализируя исходный прямоугольник, задаваемый третьим, четвертым, пятым и шестым параметрами метода. В рассматриваемом случае изображение яблока обрезается до 75% его ширины и 75% высоты.

Метод DrawImage определяет, где рисовать обрезанное изображение яблока и как его следует масштабировать, анализируя прямоугольник назначения, задаваемый вторым параметром метода. В данном случае прямоугольник назначения на 30% шире и на 30% выше, чем исходное изображение.

На следующем рисунке показаны исходное изображение яблока и его масштабированное обрезанное изображение.

Обрезка и масштабирование

Dim image As New Bitmap("Apple.gif")

' Draw the image unaltered with its upper-left corner at (0, 0).
e.Graphics.DrawImage(image, 0, 0)

' Make the destination rectangle 30 percent wider and
' 30 percent taller than the original image.
' Put the upper-left corner of the destination
' rectangle at (150, 20).
Dim width As Integer = image.Width
Dim height As Integer = image.Height
Dim destinationRect As New RectangleF( _
    150, _
    20, _
    1.3F * width, _
    1.3F * height)

' Draw a portion of the image. Scale that portion of the image
' so that it fills the destination rectangle.
Dim sourceRect As New RectangleF(0, 0, 0.75F * width, 0.75F * height)
e.Graphics.DrawImage( _
    image, _
    destinationRect, _
    sourceRect, _
    GraphicsUnit.Pixel)

Image image = new Bitmap("Apple.gif");

// Draw the image unaltered with its upper-left corner at (0, 0).
e.Graphics.DrawImage(image, 0, 0);

// Make the destination rectangle 30 percent wider and
// 30 percent taller than the original image.
// Put the upper-left corner of the destination
// rectangle at (150, 20).
int width = image.Width;
int height = image.Height;
RectangleF destinationRect = new RectangleF(
    150,
    20,
    1.3f * width,
    1.3f * height);

// Draw a portion of the image. Scale that portion of the image
// so that it fills the destination rectangle.
RectangleF sourceRect = new RectangleF(0, 0, .75f * width, .75f * height);
e.Graphics.DrawImage(
    image,
    destinationRect,
    sourceRect,
    GraphicsUnit.Pixel);

Компиляция кода

Предыдущий пример предназначен для работы с Windows Forms, для него необходим объект PaintEventArgs e, передаваемый в качестве параметра обработчику события Paint. Не забудьте заменить путь и имя файла Apple.gif именем файла изображения в вашей системе.

См. также

Другие ресурсы

Работа с растровыми и векторными изображениями с использованием классов Image, Bitmap и Metafile

Работа с растровыми и векторными изображениями