【问题标题】:C# : How to calculate aspect ratioC#:如何计算纵横比
【发布时间】:2012-11-07 21:28:22
【问题描述】:

我对编程比较陌生。我需要从给定的维度(比如 axb)计算纵横比(16:9 或 4:3)。如何使用 C# 实现这一点。任何帮助将不胜感激。

public string AspectRatio(int x, int y)
{
 //code am looking for
 return ratio
}

谢谢。

【问题讨论】:

  • 获取宽高比
  • Calculate a Ratio in C# 的可能重复项
  • @V4Vendetta 它只包含同样不太好的解决方案。

标签: c# asp.net aspect-ratio


【解决方案1】:

您需要找到最大公约数,并将 x 和 y 除以它。

static int GCD(int a, int b)
{
    int Remainder;

    while( b != 0 )
    {
        Remainder = a % b;
        a = b;
        b = Remainder;
    }

    return a;
}

return string.Format("{0}:{1}",x/GCD(x,y), y/GCD(x,y));

PS

如果您希望它处理像 16:10(可以除以 2,使用上面的方法将返回 8:5)之类的东西,您需要有一个预定义的表 ((float)x)/y-aspect ratio 对

【讨论】:

  • 非常感谢。让我试试看。
  • 这对比率 16:10 失败... ;)
  • 1366x768 分辨率的笔记本用户很差 =(
【解决方案2】:

由于您只需要在 16:9 和 4:3 之间做出决定,因此这里有一个更简单的解决方案。

public string AspectRatio(int x, int y)
{
    double value = (double)x / y;
    if (value > 1.7)
        return "16:9";
    else
        return "4:3";
}

【讨论】:

    【解决方案3】:

    只有几个标准比率,例如:4:35:416:1016:9GCD 是个好主意,但至少在16:10 比率和1366x768 分辨率下会失败。

    对于 1366x768,纯 GCD 算法将得到 683:384,因为 683 是素数,而分辨率几乎是 16:9 (16.0078125)。

    我想,对于真正的任务,需要实现相当复杂的算法:

    首先尝试已知的纵横比(在wikipedia 查找它们),允许出现一些错误,然后才使用 GCD 作为后备。

    别忘了32:10 ;-)

    【讨论】:

    • 非常感谢。是的,很少有像你提到的例外情况
    • @kirilloid 我一直在使用 GCD,正在寻找有关那些“相当复杂的算法”的见解。你知道从哪里开始更彻底的事情吗?
    • @TR3B 找到具有小 (
    • 所以这一切都归结为......为什么我们都在谈论计算 AR 时你不能在没有映射的情况下涵盖所有规范?
    • 我认为随着 19:9, 19.5:9, 20:9 等长款智能手机的推出,它会老化得很好
    【解决方案4】:

    您需要找到 GCD (http://en.wikipedia.org/wiki/Greatest_common_divisor),然后:

    return x/GCD + ":" + y/GCD;
    

    【讨论】:

    • 非常感谢。会试试看。
    • 这对于比率 16:10 失败... ;)
    • 16:10 也称为8:5 :)
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 2010-11-14
    • 2011-11-18
    • 2013-06-13
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多