调整大小,同时保持纵横比并四舍五入为偶数

Tre*_*ott 5 c# resize image aspect-ratio

我允许用户调整图像大小,同时尝试保持图像的原始纵横比。

对于每个调整大小操作,我都有一个“偏移”变量,它指示宽度和高度的变化。这是基于鼠标移动的,因此它可以是任意值的组合,具体取决于调整大小时移动鼠标的程度。

我现在正在做的是取两个值(x 和 y 变化)中较大的一个,并使用它来计算相同纵横比的另一个值。这是我的代码:

if (Math.Abs(offset.X) > Math.Abs(offset.Y))
{
    offset.Y = (int)(offset.X / AspectRatio);
}
else
{
    offset.X = (int)(offset.Y * AspectRatio);
}
Run Code Online (Sandbox Code Playgroud)

长宽比是标准宽度/高度值。

我的代码的问题在于它使用整数值,因此它会四舍五入并导致纵横比扭曲。

我假设我需要做的是捕捉到可被纵横比整除的整数值,或者为此目的。但我不知道如何通过修改这些 x 和 y“偏移”值来做到这一点。

Mer*_*ham 1

我假设我需要做的是捕捉到可被纵横比整除的整数值,或者为此目的。但我不知道如何通过修改这些 x 和 y“偏移”值来做到这一点。

要么你的纵横比、裁剪或尺寸调整不完美。想一想:

对于 3:4 的宽高比,您可以水平缩放并仍然完美匹配原始比例的最小尺寸是多少?

四个像素。

现在将纵横比更改为两个大素数,您就会看到问题。

相反,您可以在一维中裁剪图像,或者使用图像过滤进行插值,并接受不太完美的宽高比变化。

确保你的计算是正确的。将纵横比计算为浮点值,并仅在最终计算时截断为整数。否则,您将出现双舍入错误。