关于裁剪和缩放 GDI+ 图像
可以使用 Graphics 类的 DrawImage 方法绘制和定位图像。 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 参数。 源矩形指定将绘制的原始图像部分。 目标矩形指定图像部分的绘制位置。 如果目标矩形的大小与源矩形的大小不同,则会缩放图像以适应目标矩形。
以下示例从 文件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);
下图显示了未缩放的图像,以及缩小和放大的图像部分。