C#:如何计算纵横比

问题描述 投票:0回答:5

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

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

谢谢。

c# asp.net aspect-ratio
5个回答
16
投票

您需要找到最大公约数,并将 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 的内容(可以除以二,使用上面的方法将返回 8:5),您需要有一个预定义的

((float)x)/y
纵横比对


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";
}

5
投票

只有几种标准比例,例如:

4:3
5:4
16:10
16:9
GCD
是个好主意,但至少在
16:10
比率和
1366x768
分辨率方面会失败。

纯 GCD 算法对于 1366x768 会得到

683:384
,因为 683 是质数,而分辨率几乎是 16:9 (16.0078125)。

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

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

不要忘记32:10;-)


1
投票

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

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

0
投票
using System.Collections.Generic;

public static class AspectRatioCalculator
{
    private static readonly Dictionary<string, string> _unusualAspectRatios = new Dictionary<string, string>()
    {
        { "683:384", "16:9" },   // 1366 x 768
        { "64:27", "21:9" },     // 2560 x 1080
        { "43:18", "21:9" },     // 3440 x 1440
        { "12:5", "21:9" },      // 3840 x 1600
        // Add your desired aspect ratio
    };

    public static string Calculate(double width, double height)
    {
        int gcd = GreatestCommonDivisor((int)width, (int)height);
        string ratio = $"{width / gcd}:{height / gcd}";
        return _unusualAspectRatios.GetValueOrDefault(ratio, ratio);
    }

    private static int GreatestCommonDivisor(int width, int height)
    {
        while (height != 0)
        {
            int remainder = width % height;
            width = height;
            height = remainder;
        }

        return width;
    }
}

您可以使用

AspectRatioCalculator
类并调用其
Calculate
函数来获取所需的宽高比。如果您需要添加任何无法提供正确答案的其他规则,只需将它们添加到
_unusualAspectRatios
映射中,将它们链接到您所需的宽高比。

© www.soinside.com 2019 - 2024. All rights reserved.