關於裁剪和縮放 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建構 Bitmap 物件。 系統會繪製整個影像,而沒有縮放比例, (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);
下圖顯示未調整的影像,以及壓縮和展開的影像部分。