Zuschneiden und Skalieren von Bildern in GDI+

Sie können die DrawImage-Methode der Graphics-Klasse verwenden, um Vektorbilder und Rasterbilder zu zeichnen und zu positionieren. DrawImage ist eine überladene Methode. Daher gibt es mehrere Möglichkeiten, wie Sie ihr Argumente übergeben können.

DrawImage-Varianten

Eine Variante der DrawImage-Methode empfängt eine Bitmap und ein Rectangle. Das Rechteck gibt das Ziel für den Zeichenvorgang an, was bedeutet, dass es das Rechteck angibt, in dem das Bild gezeichnet werden soll. Wenn sich die Größe des Zielrechtecks von der Größe des Originalbilds unterscheidet, wird das Bild so skaliert, dass es in das Zielrechteck passt. Im folgenden Codebeispiel wird gezeigt, wie Sie dasselbe Bild dreimal zeichnen: einmal ohne Skalierung, einmal mit einer Erweiterung und einmal mit einer Komprimierung:

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

Die folgende Abbildung zeigt die drei Bilder.

Scaling

Einige Varianten der DrawImage-Methode weisen einen „source-rectangel“-Parameter (Quellrechteck) sowie einen „destination-rectangle“-Parameter (Zielrechteck) auf. Der Parameter „source-rectangle“ gibt den Teil des Originalbilds an, der gezeichnet werden soll. Das Zielrechteck gibt das Rechteck an, in dem dieser Teil des Bilds gezeichnet werden soll. Weicht die Größe des Zielrechtecks von der Größe des Quellrechtecks ab, wird das Bild so skaliert, dass es in das Zielrechteck passt.

Das folgende Codebeispiel zeigt, wie Sie eine Bitmap aus der Datei „Runner.jpg“ erstellen. Das gesamte Bild wird ohne Skalierung bei (0, 0) gezeichnet. Dann wird ein kleiner Teil des Bilds zweimal gezeichnet: einmal mit einer Komprimierung und einmal mit einer Erweiterung.

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

Die folgende Abbildung zeigt das unskalierte Bild und die komprimierten und erweiterten Bildteile.

Cropping and Scaling

Siehe auch