Ich versuche, die gleiche Sache wie in der verlinkten Frage zu tun, aber mit C#. Ich zeige ein skaliertes Bild und erlaube dem Benutzer, einen Bereich zum Zuschneiden auszuwählen. Ich kann jedoch nicht einfach die Koordinaten x1y1, x2y2 aus der skalierten Bildauswahl nehmen und diese aus dem Original beschneiden. Ich habe versucht, einige grundlegende Mathematik wie in der anderen Frage zu tun, aber das ist offensichtlich nicht der richtige Ansatz entweder (es ist definitiv näher).
Editar
Abmessungen des Originalbildes: w = 1024 h = 768
Skalierte Bildabmessungen: w = 550 h = 412
Ich beginne mit einem Bild, sagen wir 1024x768. Ich möchte, dass es so groß wie möglich in ein Feld von 550x550 passt. Ich verwende die folgende Methode, um die skalierte Bildgröße zu erhalten (unter Beibehaltung des Seitenverhältnisses). Dann führe ich eine grundlegende Größenänderung auf diese neuen Abmessungen durch.
Der Auswahlbereich kann zwischen (0,0) und (100,100) liegen.
private static Rectangle MaintainAspectRatio(Image imgPhoto, Rectangle thumbRect)
{
int sourceWidth = imgPhoto.Width; int sourceHeight = imgPhoto.Height; int sourceX = 0; int sourceY = 0; int destX = 0; int destY = 0;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)thumbRect.Width / (float)sourceWidth);
nPercentH = ((float)thumbRect.Height / (float)sourceHeight);
//if we have to pad the height pad both the top and the bottom
//with the difference between the scaled height and the desired height
if (nPercentH < nPercentW)
{
nPercent = nPercentH;
destX = (int)((thumbRect.Width - (sourceWidth * nPercent)) / 2);
}
else
{
nPercent = nPercentW;
destY = (int)((thumbRect.Height - (sourceHeight * nPercent)) / 2);
}
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Rectangle retRect = new Rectangle(thumbRect.X, thumbRect.Y, destWidth, destHeight);
return retRect;
}