リンクされた質問と同じことをしようとしていますが、C#を使用しています。スケーリングされた画像を表示しており、ユーザーがトリミングする領域を選択できるようにしています。ただし、スケーリングされた画像の選択からx1y1、x2y2座標を取得して、元の画像から切り取ることはできません。私は他の質問のようにいくつかの基本的な計算を試みましたが、それは明らかに正しいアプローチではありません (間違いなく近いです)。
編集
元の画像の寸法:w = 1024 h = 768
スケーリングされた画像の寸法:w = 550 h = 412
1024x768 などの画像から始めます。550x550 のボックスにできるだけ大きく収まるようにしたいです。次の方法を使用して、スケーリングされた画像サイズを取得しています(アスペクト比を維持しながら)。次に、それらの新しい寸法に合わせて基本的なサイズ変更を行います。
選択範囲に関しては、(0,0) から (100,100) までの任意の値を指定できます。
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;
}