Condividi tramite


Informazioni sul ritaglio e sul ridimensionamento di immagini GDI+

È possibile usare il metodo DrawImage della classe Graphics per disegnare e posizionare immagini. DrawImage è un metodo di overload, quindi esistono diversi modi in cui è possibile specificarlo con argomenti. Una variante del metodo Graphics::D rawImage riceve l'indirizzo di un oggetto Image e un riferimento a un oggetto Rect . Il rettangolo specifica la destinazione per l'operazione di disegno; ovvero, specifica il rettangolo in cui verrà disegnata l'immagine. Se le dimensioni del rettangolo di destinazione sono diverse dalle dimensioni dell'immagine originale, l'immagine viene ridimensionata per adattare il rettangolo di destinazione. L'esempio seguente disegna la stessa immagine tre volte: una volta senza ridimensionamento, una volta con un'espansione e una volta con una compressione.

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

Il codice precedente, insieme a un determinato file, Spiral.png, ha prodotto l'output seguente.

figura che mostra tre versioni di un'immagine: normale, estesa e ridotto a metà delle dimensioni originali

Alcune varianti del metodo Graphics::D rawImage hanno un parametro di rettangolo di origine e un parametro del rettangolo di destinazione. Il rettangolo di origine specifica la parte dell'immagine originale che verrà disegnata. Il rettangolo di destinazione specifica dove verrà disegnata tale parte dell'immagine. Se le dimensioni del rettangolo di destinazione sono diverse dalle dimensioni del rettangolo di origine, l'immagine viene ridimensionata per adattare il rettangolo di destinazione.

Nell'esempio seguente viene costruito un oggetto Bitmap dal file Runner.jpg. L'intera immagine viene disegnata senza ridimensionamento a (0, 0). Una piccola parte dell'immagine viene quindi disegnata due volte: una volta con una compressione e una volta con un'espansione.

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

La figura seguente mostra l'immagine non ridimensionata e le parti dell'immagine compressa e espansa.

screenshot che mostra un'immagine, quindi una parte dell'immagine compressa e quindi la stessa parte espansa