我允许用户在尝试保持图像的原始宽高比时调整图像大小。
对于每次调整大小操作,我都有一个“偏移”变量,表示宽度和高度的变化。这基于鼠标移动,因此它可以是值的任意组合,具体取决于调整大小时移动鼠标的程度。
我现在正在做的是取两个值中的较大值(x和y变化)并使用它来计算相同宽高比的另一个值。这是我的代码:
if (Math.Abs(offset.X) > Math.Abs(offset.Y))
{
offset.Y = (int)(offset.X / AspectRatio);
}
else
{
offset.X = (int)(offset.Y * AspectRatio);
}
宽高比是标准宽度/高度值。
我的代码的问题在于它使用整数值,因此它会四舍五入并导致宽高比变形。
我假设我需要做的是捕捉到可以被宽高比整除的整数值,或者为此目的。但我不知道如何修改这些x和y“偏移”值。
答案 0 :(得分:2)
使offset.X,.Y和AspectRatio浮动/加倍,执行您需要的任何计算,并且只计算一次新的大小将其四舍五入为整数。
这样你就可以获得最大的精确度。
P.S。 使用Math.Round而不是简单地转换为int,这将获得一些额外的精度。
答案 1 :(得分:1)
我假设我需要做的是捕捉到可以被宽高比整除的整数值,或者为此目的。但我不知道如何修改这些x和y“偏移”值。
要么你的宽高比,裁剪或厚实的大小调整都不完美。想一想:
使用3:4的宽高比,您可以水平缩放的最小尺寸是多少,并且仍然与原始比例完美匹配?
四个像素。
现在将宽高比更改为两个大质数,您将看到问题。
除此之外,您可以在一个维度上裁剪图像,或者使用图像过滤进行插值,并使用不太完美的宽高比更改。
确保你的计算是正确的。将纵横比计算为浮点值,并仅在最终计算时截断为整数。否则你会有双舍入错误。