11

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

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

谢谢。

4

4 回答 4

13

您需要找到最大公约数,并将 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));

附言

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

于 2012-04-09T07:40:31.953 回答
6

由于您只需要在 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";
}
于 2012-04-09T07:56:16.860 回答
5

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

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

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

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

不要忘记32:10 ;-)

于 2012-04-09T08:02:18.947 回答
1

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

return x/GCD + ":" + y/GCD;
于 2012-04-09T07:40:26.293 回答