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


Обрезка и масштабирование изображений GDI+

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

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

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

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

Image image(L"Apple.gif");
UINT width = image.GetWidth();
UINT height = image.GetHeight();
// 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).
Rect destinationRect(150, 20, 1.3 * width, 1.3 * height);
// Draw the image unaltered with its upper-left corner at (0, 0).
graphics.DrawImage(&image, 0, 0);
// Draw a portion of the image. Scale that portion of the image
// so that it fills the destination rectangle.
graphics.DrawImage(
   &image,
   destinationRect,
   0, 0,              // upper-left corner of source rectangle
   0.75 * width,      // width of source rectangle
   0.75 * height,     // height of source rectangle
   UnitPixel);

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

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