Сведения об обрезке и масштабировании изображений GDI+
Для рисования и размещения изображений можно использовать метод DrawImage класса Graphics . DrawImage — это перегруженный метод, поэтому существует несколько способов предоставления ему аргументов. Один из вариантов метода Graphics::D rawImage получает адрес объекта Image и ссылку на объект Rect . Прямоугольник указывает назначение для операции рисования; то есть указывает прямоугольник, в котором будет нарисовано изображение. Если размер целевого прямоугольника отличается от размера исходного изображения, изображение масштабируется в соответствии с целевым прямоугольником. В следующем примере одно и то же изображение рисуется три раза: один раз без масштабирования, один раз с расширением и один раз со сжатием.
Bitmap myBitmap(L"Spiral.png");
Rect expansionRect(80, 10, 2 * myBitmap.GetWidth(), myBitmap.GetHeight());
Rect compressionRect(210, 10, myBitmap.GetWidth() / 2,
myBitmap.GetHeight() / 2);
myGraphics.DrawImage(&myBitmap, 10, 10);
myGraphics.DrawImage(&myBitmap, expansionRect);
myGraphics.DrawImage(&myBitmap, compressionRect);
Приведенный выше код вместе с конкретным файлом, Spiral.png, выводятся следующие выходные данные.
Некоторые варианты метода Graphics::D rawImage имеют параметр source-rectangle и параметр destination-rectangle. Исходный прямоугольник указывает часть исходного изображения, которая будет нарисована. Прямоугольник назначения указывает, где будет отрисована эта часть изображения. Если размер прямоугольника назначения отличается от размера исходного прямоугольника, изображение масштабируется в соответствии с прямоугольником назначения.
В следующем примере создается объект Bitmap из файла Runner.jpg. Все изображение рисуется без масштабирования с привязкой к точке (0, 0). Затем небольшая часть изображения рисуется дважды: один раз с уменьшением масштаба, а второй раз с увеличением масштаба.
Bitmap myBitmap(L"Runner.jpg");
// The rectangle (in myBitmap) with upper-left corner (80, 70),
// width 80, and height 45, encloses one of the runner's hands.
// Small destination rectangle for compressed hand.
Rect destRect1(200, 10, 20, 16);
// Large destination rectangle for expanded hand.
Rect destRect2(200, 40, 200, 160);
// Draw the original image at (0, 0).
myGraphics.DrawImage(&myBitmap, 0, 0);
// Draw the compressed hand.
myGraphics.DrawImage(
&myBitmap, destRect1, 80, 70, 80, 45, UnitPixel);
// Draw the expanded hand.
myGraphics.DrawImage(
&myBitmap, destRect2, 80, 70, 80, 45, UnitPixel);
На следующем рисунке показано немасштабированное изображение, а также уменьшенная и увеличенная часть изображения.