我对编程还比较陌生。我需要根据给定尺寸(例如 axb)计算纵横比(16:9 或 4:3)。我如何使用 C# 来实现这一点。任何帮助将不胜感激。
public string AspectRatio(int x, int y)
{
//code am looking for
return ratio
}
谢谢。
您需要找到最大公约数,并将 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
纵横比对
由于您只需要在 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";
}
您需要找到 GCD (http://en.wikipedia.org/wiki/Greatest_common_divisor),然后:
return x/GCD + ":" + y/GCD;
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
映射中,将它们链接到您所需的宽高比。