次の方法で共有


GDI+ 画像のトリミングとスケーリングについて

Graphics クラスの DrawImage メソッドを使用して、画像を描画および配置できます。 DrawImage はオーバーロードされたメソッドであるため、引数を指定する方法はいくつかあります。 Graphics::D rawImage メソッドの 1 つのバリエーションは、Image オブジェクトのアドレスと Rect オブジェクトへの参照を受け取ります。 四角形は、描画操作の宛先を指定します。つまり、イメージを描画する四角形を指定します。 転送先四角形のサイズが元のイメージのサイズと違う場合は、転送先四角形に合わせてイメージが拡大縮小されます。 次の例では、同じイメージを 3 回描画します。1 回はスケーリングなし、1 回は展開、1 回は圧縮です。

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、次の出力を生成しました。

画像の 3 つのバージョンを示す図: 標準、幅が広く、元のサイズの半分に縮小

Graphics::D rawImage メソッドの一部のバリエーションには、ソース四角形パラメーターと変換先四角形パラメーターがあります。 ソース四角形は、描画される元のイメージの部分を指定します。 コピー先の四角形は、イメージのその部分を描画する場所を指定します。 コピー先の四角形のサイズがソース四角形のサイズと異なる場合、イメージは目的の四角形に合わせて拡大縮小されます。

次の例では、ファイル Runner.jpgから Bitmap オブジェクトを作成します。 イメージ全体が、拡大縮小なしで (0, 0) に描画されます。 次に、イメージの小さな部分が 2 回描画されます。1 回は縮小、もう 1 回は拡大が使用されます。

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);

次の図は、拡大縮小されていないイメージ、縮小されたイメージ部分、および拡大されたイメージ部分を示しています。

画像を示すスクリーン ショット、イメージの一部が圧縮された後、同じ部分が展開された