Ritaglio e ridimensionamento di immagini in GDI+
Aggiornamento: novembre 2007
È possibile utilizzare il metodo DrawImage della classe Graphics per tracciare e posizionare immagini vettoriali e immagini raster. DrawImage è un metodo di overload della classe, quindi è possibile fornire argomenti a tale metodo in svariati modi.
Variazioni del metodo DrawImage
Una variazione del metodo DrawImage riceve un oggetto Bitmap e un oggetto Rectangle. Il rettangolo consente di specificare la destinazione per l'operazione di disegno, ovvero di specificare il rettangolo in cui verrà tracciata l'immagine. Se le dimensioni del rettangolo di destinazione non corrispondono alle dimensioni dell'immagine originale, tale immagine verrà ridimensionata e adattata al rettangolo di destinazione. Nell'esempio seguente viene illustrato come disegnare la stessa immagine tre volte: una volta senza ridimensionamento, una volta con espansione e una volta con compressione.
Dim myBitmap As New Bitmap("Spiral.png")
Dim expansionRectangle As New Rectangle(135, 10, _
myBitmap.Width, myBitmap.Height)
Dim compressionRectangle As New Rectangle(300, 10, _
CType(myBitmap.Width / 2, Integer), CType(myBitmap.Height / 2, Integer))
myGraphics.DrawImage(myBitmap, 10, 10)
myGraphics.DrawImage(myBitmap, expansionRectangle)
myGraphics.DrawImage(myBitmap, compressionRectangle)
Bitmap myBitmap = new Bitmap("Spiral.png");
Rectangle expansionRectangle = new Rectangle(135, 10,
myBitmap.Width, myBitmap.Height);
Rectangle compressionRectangle = new Rectangle(300, 10,
myBitmap.Width / 2, myBitmap.Height / 2);
myGraphics.DrawImage(myBitmap, 10, 10);
myGraphics.DrawImage(myBitmap, expansionRectangle);
myGraphics.DrawImage(myBitmap, compressionRectangle);
Di seguito vengono mostrate le tre immagini.
In alcune variazioni del metodo DrawImage oltre al parametro relativo al rettangolo di destinazione è disponibile anche il parametro relativo al rettangolo di origine. Il parametro relativo al rettangolo di origine consente di specificare la porzione dell'immagine originale da tracciare. Il rettangolo di destinazione consente di specificare il rettangolo in cui la porzione dell'immagine verrà tracciata. Se le dimensioni del rettangolo di destinazione non corrispondono alle dimensioni del rettangolo di origine, l'immagine verrà ridimensionata e adattata al rettangolo di destinazione.
Nell'esempio che segue viene illustrato come costruire un oggetto Bitmap dal file Runner.jpg. L'intera immagine viene tracciata senza ridimensionamento nella posizione (0, 0). Una porzione ridotta dell'immagine viene quindi tracciata due volte: una volta con riduzione e una volta con espansione.
Dim myBitmap As New Bitmap("Runner.jpg")
' One hand of the runner
Dim sourceRectangle As New Rectangle(80, 70, 80, 45)
' Compressed hand
Dim destRectangle1 As New Rectangle(200, 10, 20, 16)
' Expanded hand
Dim destRectangle2 As New Rectangle(200, 40, 200, 160)
' Draw the original image at (0, 0).
myGraphics.DrawImage(myBitmap, 0, 0)
' Draw the compressed hand.
myGraphics.DrawImage( _
myBitmap, destRectangle1, sourceRectangle, GraphicsUnit.Pixel)
' Draw the expanded hand.
myGraphics.DrawImage( _
myBitmap, destRectangle2, sourceRectangle, GraphicsUnit.Pixel)
Bitmap myBitmap = new Bitmap("Runner.jpg");
// One hand of the runner
Rectangle sourceRectangle = new Rectangle(80, 70, 80, 45);
// Compressed hand
Rectangle destRectangle1 = new Rectangle(200, 10, 20, 16);
// Expanded hand
Rectangle destRectangle2 = new Rectangle(200, 40, 200, 160);
// Draw the original image at (0, 0).
myGraphics.DrawImage(myBitmap, 0, 0);
// Draw the compressed hand.
myGraphics.DrawImage(
myBitmap, destRectangle1, sourceRectangle, GraphicsUnit.Pixel);
// Draw the expanded hand.
myGraphics.DrawImage(
myBitmap, destRectangle2, sourceRectangle, GraphicsUnit.Pixel);
Di seguito vengono mostrate l'immagine non ridimensionata e le porzioni di immagine ridotte ed espanse.