Zuschneiden eines Bildes in C#

Abdullahi Salawudeen 15 Februar 2024
  1. Verwenden Sie die Graphics.DrawImage()-Methode, um ein Bild in C# zu zeichnen und zuzuschneiden
  2. Verwenden Sie DrawImage() mit fünf Parametern, um ein Bild in C# zuzuschneiden
  3. Verwenden Sie DrawImage() mit angegebenem Teil, Ort und Größe, um ein Bild in C# zuzuschneiden
Zuschneiden eines Bildes in C#

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 von srcRect 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:

  1. Ein Bild wurde aus einer JPEG-Datei Koala.jpg erstellt, die sich im Ordner C:\Users\lolaa\Downloads befindet.
  2. Die Koordinaten zum Zeichnen des Bildes wurden erstellt.
  3. Ein Quellrechteck wurde erstellt, um einen Teil des Bildes zu extrahieren.
  4. Die Maßeinheit wurde auf Pixel eingestellt.
  5. 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:

Zielseite der Anwendung

Wenn Sie auf die Schaltfläche klicken, wird das folgende Bild angezeigt:

Ausgang:

Bild - Auf dem Bildschirm gezeichneter Koala

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:

Bild - Zugeschnittenes Bild von Koala

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 und srcY - die x- und y-Koordinaten der oberen linken Ecke des Bildes.
  • srcWidth und srcHeight – geben die Breite bzw. Höhe des Bildes an.
  • srcUnit - gehört zur Aufzählung GraphicsUnit. Es sind die Maßeinheiten, die vom Parameter srcRect verwendet werden.
  • imageAttrs – eine ImageAttributes-Instanz, die Recoloring- und Gamma-Informationen für Bildobjekte angibt.
  • callback - eine Delegate-Funktion von Graphics.DrawImageAbort. Es gibt die Überladung DrawImage() 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 den Graphics.DrawImageAbort-Delegaten an, die verwendet werden sollen, wenn geprüft wird, ob die Ausführung der DrawImage-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:

  1. Eine Instanz der Callback-Methode Graphics.DrawImageAbort wurde erstellt.
  2. Ein Bild Koala.jpg im Ordner C:\Users\lolaa\Downloads wurde erstellt.
  3. Punkte wurden für das Zielrechteck erstellt, um das Bild zu zeichnen.
  4. Ein rechteckiger Container wurde erstellt, um den zu zeichnenden Teil des Bildes anzugeben.
  5. Die Zeicheneinheit der Grafik wurde auf Pixel eingestellt.
  6. Das Originalbild wurde auf den Bildschirm gezeichnet.
  7. Ein zusätzlicher rechteckiger Container zum Zeichnen eines angepassten Bildes.
  8. Stellt die Attribute des angepassten Bildes auf einen größeren Gammawert ein.
  9. 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:

Bild - Original- und bearbeitetes Bild von Koala

Weitere Diskussionen zu anderen überladenen DrawImage()-Methoden finden Sie in [dieser Referenz]).

Abdullahi Salawudeen avatar Abdullahi Salawudeen avatar

Abdullahi is a full-stack developer and technical writer with over 5 years of experience designing and implementing enterprise applications. He loves taking on new challenges and believes conceptual programming theories should be implemented in reality.

LinkedIn GitHub

Verwandter Artikel - Csharp Image