共用方式為


關於裁剪和縮放 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);

下圖顯示未調整的影像,以及壓縮和展開的影像部分。

顯示影像的螢幕擷取畫面,然後壓縮影像的一部分,然後展開相同的部分