我猜您正在寻找可用的纵横比 integer:integer 解决方案,例如 16:9,而不是 float:1 解决方案,例如 1.77778:1。
如果是这样,您需要做的是找到最大公约数 (GCD) 并将两个值除以它。 GCD 是两个数均分的最高数。所以 6 和 10 的 GCD 是 2, 44 和 99 的 GCD 是 11。
例如,1024x768 显示器的 GCD 为 256。当您将这两个值除以 4x3 或 4:3。
一种(递归)GCD算法:
function gcd (a,b):
if b == 0:
return a
return gcd (b, a mod b)
在 C 中:
static int gcd (int a, int b) {
return (b == 0) ? a : gcd (b, a%b);
}
int main(void) {
printf ("gcd(1024,768) = %d\n",gcd(1024,768));
}
这里有一些完整的 HTML/Javascript,它展示了一种检测屏幕尺寸并从中计算纵横比的方法。这适用于 FF3,我不确定其他浏览器对 screen.width 和 screen.height 的支持。
<html><body>
<script type="text/javascript">
function gcd (a, b) {
return (b == 0) ? a : gcd (b, a%b);
}
var w = screen.width;
var h = screen.height;
var r = gcd (w, h);
document.write ("<pre>");
document.write ("Dimensions = ", w, " x ", h, "<br>");
document.write ("Gcd = ", r, "<br>");
document.write ("Aspect = ", w/r, ":", h/r);
document.write ("</pre>");
</script>
</body></html>
它输出(在我奇怪的宽屏显示器上):
Dimensions = 1680 x 1050
Gcd = 210
Aspect = 8:5
我测试过的其他人:
Dimensions = 1280 x 1024
Gcd = 256
Aspect = 5:4
Dimensions = 1152 x 960
Gcd = 192
Aspect = 6:5
Dimensions = 1280 x 960
Gcd = 320
Aspect = 4:3
Dimensions = 1920 x 1080
Gcd = 120
Aspect = 16:9
我希望我在家里有最后一个,但是,不,不幸的是它是一台工作机器。
如果你发现你的图形调整工具不支持纵横比,你会怎么做是另一回事。我怀疑最好的办法是添加信箱线(就像您在旧电视上观看宽屏电影时在旧电视顶部和底部看到的那样)。我会在顶部/底部或侧面添加它们(以导致最少的信箱线数量为准),直到图像符合要求。
您可能要考虑的一件事是图片的质量已从 16:9 更改为 5:4 - 我仍然记得我年轻时在电视上看到的令人难以置信的高瘦牛仔被介绍了。您最好为每个纵横比制作一张不同的图片,然后在发送之前根据实际屏幕尺寸调整正确的图片大小。