Bildverarbeitung in C#: Größenänderung und Zuschneiden (Resize, Crop)

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Bildern in C#: Größenänderung und Zuschneiden (Resize, Crop)

\n\n

In der modernen Webentwicklung und bei Desktop-Anwendungen müssen Bilder oft programmatisch verarbeitet werden: Verkleinern zur Beschleunigung des Ladens, Erstellen von Miniaturansichten oder Zuschneiden überflüssiger Ränder. Im .NET-Ökosystem gibt es mehrere Ansätze, um diese Aufgaben zu lösen. In diesem Artikel betrachten wir zwei Hauptmethoden zur Größenänderung (Resize) und zum Zuschneiden (Crop) von Bildern in C#: das klassische System.Drawing und das moderne plattformübergreifende SixLabors.ImageSharp.

\n\n

1. Verwendung von System.Drawing (Windows Forms / .NET Framework)

\n

Die klassische Methode, verfügbar in .NET Framework und .NET Core/5+ (mit Einschränkungen unter Linux/macOS). Funktioniert über den Namespace System.Drawing und die Klasse Bitmap. Geeignet für ältere Projekte oder Windows-Only-Anwendungen.

\n\n

Beispiel: Größenänderung unter Beibehaltung der Proportionen

\n
using System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imaging;\n\npublic static Bitmap ResizeImage(Image image, int newWidth, int newHeight)\n{\n    var destRect = new Rectangle(0, 0, newWidth, newHeight);\n    var destImage = new Bitmap(newWidth, newHeight);\n\n    using (var graphics = Graphics.FromImage(destImage))\n    {\n        graphics.CompositingMode = CompositingMode.SourceCopy;\n        graphics.CompositingQuality = CompositingQuality.HighQuality;\n        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;\n        graphics.SmoothingMode = SmoothingMode.HighQuality;\n        graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;\n\n        using (var wrapMode = new ImageAttributes())\n        {\n            wrapMode.SetWrapMode(WrapMode.TileFlipXY);\n            graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);\n        }\n    }\n    return destImage;\n}\n\n// Verwendung:\nusing (var original = Image.FromFile("input.jpg"))\n{\n    using (var resized = ResizeImage(original, 800, 600))\n    {\n        resized.Save("output.jpg", ImageFormat.Jpeg);\n    }\n}
\n\n

Beispiel: Zuschneiden (Crop) eines Bildes

\n
public static Bitmap CropImage(Image source, Rectangle cropArea)\n{\n    var bmp = new Bitmap(cropArea.Width, cropArea.Height);\n    using (var g = Graphics.FromImage(bmp))\n    {\n        g.DrawImage(source, new Rectangle(0, 0, bmp.Width, bmp.Height),\n                    cropArea, GraphicsUnit.Pixel);\n    }\n    return bmp;\n}\n\n// Verwendung:\nvar cropRect = new Rectangle(100, 50, 300, 200); // X, Y, Width, Height\nusing (var cropped = CropImage(Image.FromFile("input.jpg"), cropRect))\n{\n    cropped.Save("cropped.jpg", ImageFormat.Jpeg);\n}
\n\n

2. SixLabors ImageSharp (plattformübergreifendes .NET)

\n

SixLabors.ImageSharp ist eine moderne, vollständig verwaltete Bibliothek zur Bildverarbeitung, die auf .NET Core, .NET 5/6/7+ und .NET Framework läuft. Sie ist nicht von der Windows-API abhängig und daher ideal für Webanwendungen (ASP.NET Core), Konsolentools und Docker-Container geeignet.

\n\n

Installation über NuGet:

\n
dotnet add package SixLabors.ImageSharp
\n\n

Beispiel: Größenänderung unter Beibehaltung der Proportionen

\n
using SixLabors.ImageSharp;\nusing SixLabors.ImageSharp.Processing;\n\npublic static void ResizeImageSharp(string inputPath, string outputPath, int width, int height)\n{\n    using (var image = Image.Load(inputPath))\n    {\n        // ResizeMode.Pad — passt das Bild ein, fügt transparente/weiße Ränder hinzu\n        // ResizeMode.Crop — schneidet auf die angegebenen Maße zu\n        // ResizeMode.Max — behält Proportionen bei, passt in das Rechteck ein\n        image.Mutate(x => x.Resize(width, height, KnownResamplers.Lanczos3));\n        image.Save(outputPath);\n    }\n}\n\n// Beispiel mit Proportionen (au                    

Empfehlungen