Zuschneiden und Skalieren von Bildern in GDI+
Aktualisiert: November 2007
Mit der DrawImage-Methode der Graphics-Klasse können Sie Vektor- und Rasterbilder zeichnen und positionieren. DrawImage ist eine überladene Methode, für die Argumente daher auf verschiedene Weisen bereitgestellt werden können.
DrawImage-Varianten
Eine Variante der DrawImage-Methode erhält Bitmap und Rectangle. Das Rechteck gibt die Zielposition für den Zeichenvorgang an, d. h. das Rechteck, in dem das Bild gezeichnet werden soll. Weicht die Größe des Zielrechtecks von der Größe des Originalbildes ab, wird das Bild durch Skalierung in das Zielrechteck eingepasst. Im folgenden Codebeispiel wird dasselbe Bild dreimal gezeichnet: einmal ohne Skalierung, einmal mit einer Ausdehnung und einmal mit einer Komprimierung:
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);
Die folgende Abbildung zeigt diese drei Bilder.
Manche Varianten der DrawImage-Methode haben sowohl einen Parameter für ein Quellrechteck als auch einen Parameter für ein Zielrechteck. Der Parameter für das Quellrechteck gibt den Teil des Originalbildes an, der gezeichnet werden soll. Der Parameter für das Zielrechteck gibt das Rechteck an, in dem dieser Teil des Bildes gezeichnet werden soll. Weicht die Größe des Zielrechtecks von der Größe des Quellrechtecks ab, wird das Bild durch Skalierung in das Zielrechteck eingepasst.
Im folgenden Codebeispiel wird ein Bitmap-Objekt aus der Datei Runner.jpg erstellt. Das gesamte Bild wird an Position (0, 0) ohne Skalierung gezeichnet. Anschließend wird ein kleiner Teil des Bildes zweimal gezeichnet: einmal mit Komprimierung und einmal mit Ausdehnung.
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);
Die folgende Abbildung zeigt das unskalierte Bild sowie den komprimierten und den ausgedehnten Teil des Bildes.