Deduzco que busca una relación de aspecto utilizable integer:integer
solución como 16:9
en lugar de una solución float:1
como 1.77778:1
.
Si es así, lo que necesita hacer es encontrar el máximo común divisor (GCD) y dividir ambos valores por eso. El GCD es el número más alto que divide equitativamente ambos números. Entonces el GCD para 6 y 10 es 2, el GCD para 44 y 99 es 11.
Por ejemplo, un monitor de 1024x768 tiene un GCD de 256. Cuando divide ambos valores, obtiene 4x3 o 4: 3.
A (recursivo) algoritmo GCD:
function gcd (a,b):
if b == 0:
return a
return gcd (b, a mod b)
En 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));
}
Y aquí hay algo de HTML completa/Javascript que muestra una manera de detectar el tamaño de la pantalla y calcular la relación de aspecto de ese. Esto funciona en FF3, no estoy seguro de qué soporte tienen otros navegadores para screen.width
y 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>
Genera (en mi extraña monitor de pantalla ancha):
Dimensions = 1680 x 1050
Gcd = 210
Aspect = 8:5
Otros que he probado este artículo en:
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
Me gustaría tener esto último en casa, pero , no, desafortunadamente es una máquina de trabajo.
Lo que hace si descubre que la relación de aspecto no es compatible con su herramienta de cambio de tamaño de gráfico es otra cuestión. Sospecho que la mejor opción sería agregar líneas de letter boxing (como las que obtienes en la parte superior e inferior de tu viejo televisor cuando estás viendo una película de pantalla ancha). Los agregaría en la parte superior/inferior o en los laterales (lo que resulte en el menor número de líneas de letter-boxing) hasta que la imagen cumpla con los requisitos.
Una cosa que quizás desee considerar es la calidad de una imagen que ha cambiado de 16: 9 a 5: 4 - Todavía recuerdo los vaqueros increíblemente altos y delgados que solía ver en mi juventud en televisión antes de la carta- el boxeo fue introducido.Puede que sea mejor tener una imagen diferente por relación de aspecto y simplemente cambiar el tamaño de la correcta para las dimensiones reales de la pantalla antes de enviarla por el cable.
Parece que hay una pieza que falta en esta pregunta. Si ya conoce la relación de aspecto de la fuente ... el título de la q no tiene sentido para mí. – Gishu
Lo arreglé. :) – Nathan
Cuando dices "ventana", ¿te refieres a "pantalla"? – Nosredna