Ich kämpfe jetzt schon seit einiger Zeit und kann anscheinend keine Ergebnisse erzielen. Ich verwende Methoden aus diesem SO QA>How to crop an image using C#?C# Bild zuschneiden mit Koordinaten
Ich bekomme keine Fehler:/Der Code läuft nur, aber das Bild wird nicht abgeschnitten.
Code:
string fileNameWitPath = "finename.png";
fileNameWitPath = context.Server.MapPath("~/content/branding/" + context.Request.QueryString["userId"] + "/logo" + "/" + fileNameWitPath)
using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Open))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
//get co-ords
int x1 = Convert.ToInt32(context.Request.QueryString["x1"].Trim());
int y1 = Convert.ToInt32(context.Request.QueryString["y1"].Trim());
int x2 = Convert.ToInt32(context.Request.QueryString["x2"].Trim());
int y2 = Convert.ToInt32(context.Request.QueryString["y2"].Trim());
Bitmap b = new Bitmap(fs);
Bitmap nb = new Bitmap((x2 - x1), (y2 - y1));
Graphics g = Graphics.FromImage(nb);
//g.DrawImage(b, x2, y2);
Rectangle cropRect = new Rectangle(x1, y1, nb.Width, nb.Height);
g.DrawImage(b, new Rectangle(x1, y1, nb.Width, nb.Height), cropRect, GraphicsUnit.Pixel);
Byte[] data;
using (var memoryStream = new MemoryStream())
{
nb.Save(memoryStream, ImageFormat.Png);
data = memoryStream.ToArray();
}
bw.Write(data);
bw.Close();
}
}
Nun, es gibt mindestens einen Tippfehler in dem Code: 'x2 = x1'. Sie sollten auch Ihr 'Graphics'-Objekt entsor- gen, nachdem Sie mit dem Zeichnen fertig sind (mit' using'). Und ich verstehe nicht den Punkt der Verwendung von 'BinaryWriter' und einem' MemoryStream', wenn Sie einfach direkt in den 'fs' Stream speichern können. –
Wie groß ist die neue Bitmap? – kennyzx
@PeterDuniho das ist ein Tippfehler, es soll x2 - x1 sein. Ich habe den Code von meinen Tests wieder auf das Original zurückgesetzt. Ergebnis ist das gleiche obwohl – Orion