c# - 在保持纵横比和四舍五入为偶数的同时调整大小

标签 c# image resize 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);
}

纵横比是标准的宽度/高度值。

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

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

最佳答案

让 offset.X,.Y 和 AspectRatio float / double ,做任何你需要的计算,只有在计算出新的尺寸后才四舍五入到整数。
这样您将获得尽可能高的精度。

附言 使用 Math.Round 而不是简单地转换为 int,这将使您获得额外的精度。

关于c# - 在保持纵横比和四舍五入为偶数的同时调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8038605/

相关文章:

c# - 在 MVVM 中调用控制方法

c# - 具有 PerWebRequest 生活方式的对象中 WcfService 代理依赖项的发布策略

c# - 单元测试 IServiceCollection 注册

image - 透明 jpg 图像。如何?

image - Web 上可缩放矢量图形的最佳文件格式?

javascript - 如何在 WordPress 中使用 javascript/jquery 调整图像大小?

html - 当我调整窗口大小时,即使使用包装器 div,div 也会四处移动?

javascript - 如何调整 Flot 库插件之一的大小?

C# LINQ to Entities 无法识别方法 'Boolean'

css - 事件状态不适用于 CSS Sprite