Rognage et mise à l'échelle d'images dans GDI+
Vous pouvez utiliser la méthode DrawImage de la classe Graphics pour dessiner et positionner des images vectorielles et des images raster. DrawImage est une méthode surchargée. Il existe donc plusieurs façons de lui fournir des arguments.
DrawImage, variantes
Une variante de la méthode DrawImage reçoit un objet Bitmap et un objet Rectangle. L'objet Rectangle spécifie la destination de l'opération de dessin, c'est-à-dire le rectangle dans lequel l'image doit être dessinée. Si la taille du rectangle de destination est différente de la taille de l'image d'origine, l'image est dimensionnée pour remplir le rectangle de destination. L'exemple de code suivant montre comment dessiner trois fois la même image : sans dimensionnement, avec agrandissement et avec réduction.
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);
L'illustration suivante représente les trois images.
Certaines variantes de la méthode DrawImage reçoivent comme paramètres un rectangle source et un rectangle de destination. Le rectangle source spécifie la portion de l'image d'origine à dessiner. Le rectangle de destination délimite la zone où cette portion de l'image doit être dessinée. Si les deux rectangles ne sont pas de taille identique, l'image est dimensionnée pour remplir le rectangle de destination.
L'exemple de code suivant indique comment construire un Bitmap à partir du fichier Runner.jpg. L'image entière est dessinée sans dimensionnement à la position (0, 0). Une petite portion de l'image est ensuite dessinée deux fois : une fois avec compression et une fois avec expansion.
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);
L'illustration suivante représente l'image non ajustée et les portions réduite et agrandie de l'image.