我试图在 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;
}