Zuschneiden eines Bildes in C#
-
Verwenden Sie die
Graphics.DrawImage()
-Methode, um ein Bild inC#
zu zeichnen und zuzuschneiden -
Verwenden Sie
DrawImage()
mit fünf Parametern, um ein Bild inC#
zuzuschneiden -
Verwenden Sie
DrawImage()
mit angegebenem Teil, Ort und Größe, um ein Bild inC#
zuzuschneiden
In diesem Artikel wird vorgestellt, wie Sie mithilfe eines C#-Codes ein bestimmtes Bild an einer bestimmten Stelle mit der Originalgröße zeichnen und zuschneiden.
Verwenden Sie die Graphics.DrawImage()
-Methode, um ein Bild in C#
zu zeichnen und zuzuschneiden
Grafiken sind im Namensraum System.Drawing
zu finden und werden hauptsächlich zum Anzeigen oder Zeichnen von Grafiken oder Bildern in .Net-basierten
Windows-Anwendungen verwendet. .Net
bietet mehrere Klassen für den Umgang mit Grafikobjekten und Formen wie Stifte, Pinsel, Rechtecke, Kreise usw.
Die Klassen Graphics und Image .Net
können ein Bild auf einem Windows Form rendern. Die Funktion DrawImage()
zeichnet einen Teil eines Bildes an einer bestimmten Stelle.
Unten ist ein Code-Snippet für die Funktion DrawImage
.
public void DrawImage(System.Drawing.Image image, float x, float y,
System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit);
Die Parameter werden im Folgenden erklärt:
Bild
- gibt das zu zeichnende Bild an.x
- gibt die x-Koordinate des Bildes an.y
- gibt die y-Koordinate des Bildes an.srcRect
– eine RectangleF-Struktur, die den zu zeichnenden Teil des Bildes angibt.srcUnit
– ein Mitglied der GraphicsUnit-Enumeration, das die vonsrcRect
verwendeten Maßeinheiten angibt.
Das folgende Codebeispiel wird mit Windows Forms und dem Eventhandler Paint
mit PaintEventArgs e
als Parameter implementiert.
Nachfolgend sind die aufgezählten Aktionen aufgeführt:
- Ein Bild wurde aus einer JPEG-Datei
Koala.jpg
erstellt, die sich im OrdnerC:\Users\lolaa\Downloads
befindet. - Die Koordinaten zum Zeichnen des Bildes wurden erstellt.
- Ein Quellrechteck wurde erstellt, um einen Teil des Bildes zu extrahieren.
- Die Maßeinheit wurde auf Pixel eingestellt.
- Das Bild wurde auf den Bildschirm gezeichnet.
Die angegebene Größe des Quellrechtecks bestimmt den Teil des ursprünglichen unskalierten Bilds, der auf dem Bildschirm gezeichnet wird.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CreatingImageObject {
public partial class Form1 : Form {
Image img = null;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {}
private void button1_Click(object sender, EventArgs e) {
if (img == null) {
img = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
}
}
private void Form1_Paint(object sender, PaintEventArgs e) {
if (img != null) {
// Graphics g = e.Graphics;
Graphics g = this.CreateGraphics();
g.DrawImage(img, 0, 0, this.Width, this.Height);
g.Dispose();
}
}
}
}
Ausgang:
Wenn Sie auf die Schaltfläche klicken, wird das folgende Bild angezeigt:
Ausgang:
Rectangle cropRect = new Rectangle(...);
Bitmap src = Image.FromFile(fileName) as Bitmap;
Bitmap target = new Bitmap(cropRect.Width, cropRect.Height);
using (Graphics g = Graphics.FromImage(target)) {
g.DrawImage(src, new Rectangle(0, 0, target.Width, target.Height), cropRect, GraphicsUnit.Pixel);
}
Verwenden Sie DrawImage()
mit fünf Parametern, um ein Bild in C#
zuzuschneiden
Um das zuvor gezeichnete Bild zu bearbeiten oder zuzuschneiden, können wir die Funktion DrawImage(Image, Single, Single, RectangleF, GraphicsUnit)
verwenden. Sie können hier sehen, dass wir fünf Parameter innerhalb der Funktion verwendet haben.
Das Aktualisieren des obigen Codes würde eine andere Ausgabe ergeben. Unten ist das aktualisierte Codebeispiel.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CreatingImageObject {
public partial class Form1 : Form {
Image img = null;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {}
private void button1_Click(object sender, EventArgs e) {
if (img == null) {
// Create image.
img = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
}
}
private void Form1_Paint(object sender, PaintEventArgs e) {
if (img != null) {
Graphics g = this.CreateGraphics();
// specify the coordinates for upper-left corner of image.
float x = 100.0F;
float y = 100.0F;
// rectangle is created for the source image with custom dimensions.
RectangleF srcRect = new RectangleF(50.0F, 50.0F, 150.0F, 150.0F);
GraphicsUnit dim = GraphicsUnit.Pixel;
// image is drawn to the screen.
g.DrawImage(img, x, y, srcRect, dim);
g.Dispose();
}
}
}
}
Ausgang:
Verwenden Sie DrawImage()
mit angegebenem Teil, Ort und Größe, um ein Bild in C#
zuzuschneiden
Wir können auch die Funktion DrawImage()
verwenden, um einen bestimmten Teil des ausgewählten Bildes an der angegebenen Stelle und in der angegebenen Größe zu zeichnen.
Syntax:
public void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, float srcX,
float srcY, float srcWidth, float srcHeight,
System.Drawing.GraphicsUnit srcUnit,
System.Drawing.Imaging.ImageAttributes? imageAttrs,
System.Drawing.Graphics.DrawImageAbort? callback, IntPtr callbackData);
Das Aktualisieren des obigen Codes würde eine andere Ausgabe ergeben. Unten ist das aktualisierte Codebeispiel.
Die Parameter werden im Folgenden erklärt:
Bild
- gibt das zu zeichnende Bild an.destRect
- gibt die Position und Größe des Bildes auf dem Bildschirm an. Es skaliert das gezeichnete Bild so, dass es in das Rechteck passt.srcX
undsrcY
- die x- und y-Koordinaten der oberen linken Ecke des Bildes.srcWidth
undsrcHeight
– geben die Breite bzw. Höhe des Bildes an.srcUnit
- gehört zur AufzählungGraphicsUnit
. Es sind die Maßeinheiten, die vom ParametersrcRect
verwendet werden.imageAttrs
– eineImageAttributes
-Instanz, die Recoloring- und Gamma-Informationen für Bildobjekte angibt.callback
- eine Delegate-Funktion vonGraphics.DrawImageAbort
. Es gibt die ÜberladungDrawImage()
an, die beim Zeichnen des Bildes aufgerufen werden soll. Die Spezifikation der Anwendung bestimmt, wie oft diese Methode aufgerufen wird.callbackData
– ein Wert gibt zusätzliche Daten für denGraphics.DrawImageAbort
-Delegaten an, die verwendet werden sollen, wenn geprüft wird, ob die Ausführung derDrawImage
-Methode gestoppt werden soll.
Das folgende Codebeispiel wurde ebenfalls mit Windows Forms und dem Ereignishandler Paint
mit PaintEventArgs e
als Parameter implementiert.
Der Code führt die folgenden Aktionen aus:
- Eine Instanz der Callback-Methode
Graphics.DrawImageAbort
wurde erstellt. - Ein Bild
Koala.jpg
im OrdnerC:\Users\lolaa\Downloads
wurde erstellt. - Punkte wurden für das Zielrechteck erstellt, um das Bild zu zeichnen.
- Ein rechteckiger Container wurde erstellt, um den zu zeichnenden Teil des Bildes anzugeben.
- Die Zeicheneinheit der Grafik wurde auf Pixel eingestellt.
- Das Originalbild wurde auf den Bildschirm gezeichnet.
- Ein zusätzlicher rechteckiger Container zum Zeichnen eines angepassten Bildes.
- Stellt die Attribute des angepassten Bildes auf einen größeren Gammawert ein.
- Das angepasste Bild wurde auf den Bildschirm gezeichnet.
Der Callback Graphics.DrawImageAbort
gibt einen bool zurück, der die Ausführung der Methode DrawImage
bestimmt.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CreatingImageObject {
public partial class Form1 : Form {
Image img = null;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {}
// Define DrawImageAbort callback method.
private bool DrawImageCallback8(IntPtr callBackData) {
// Test for call that passes callBackData parameter.
if (callBackData == IntPtr.Zero) {
// If no callBackData passed, abort the DrawImage method.
return true;
} else {
// If callBackData passed, continue DrawImage method.
return false;
}
}
private void button1_Click(object sender, EventArgs e) {
if (img == null) {
// Create image.
img = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
}
}
private void Form1_Paint(object sender, PaintEventArgs e) {
if (img != null) {
Graphics g = this.CreateGraphics();
// Create a call-back method.
Graphics.DrawImageAbort imageCallback = new Graphics.DrawImageAbort(DrawImageCallback8);
IntPtr imageCallbackData = new IntPtr(1);
// Create image.
// Image newImage = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
// img = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
// rectangle for the original image.
Rectangle destRectOriginal = new Rectangle(100, 25, 450, 150);
// coordinates of the rectangle.
float x = 50.0F;
float y = 50.0F;
float width = 150.0F;
float height = 150.0F;
GraphicsUnit dim = GraphicsUnit.Pixel;
// Draw original image to screen.
g.DrawImage(img, destRectOriginal, x, y, width, height, dim);
// rectangle for the adjusted image.
Rectangle destRectAdjusted = new Rectangle(100, 175, 450, 150);
// image attributes and sets gamma.
ImageAttributes imageAttribute = new ImageAttributes();
imageAttribute.SetGamma(4.0F);
// Draw adjusted image to screen.
try {
checked {
// Draw adjusted image to screen.
g.DrawImage(img, destRectAdjusted, x, y, width, height, dim, imageAttribute,
imageCallback, imageCallbackData);
}
} catch (Exception ex) {
g.DrawString(ex.ToString(), new Font("Arial", 8), Brushes.Black, new PointF(0, 0));
}
}
}
public void DrawImageRect4FloatAttribAbortData(PaintEventArgs e) {}
}
}
Ausgang:
Weitere Diskussionen zu anderen überladenen DrawImage()
-Methoden finden Sie in [dieser Referenz]).