6 votos

redimensionar una imagen

No estoy seguro sobre el título de esta pregunta, así que si alguien sabe adecuado, por favor, cambie el nombre. Es una programación relacionada con la pregunta (pero no implica ningún tipo de programación). He publicado en stack overflow, pero no obtener ninguna respuesta, así que estoy tratando aquí.

Necesito mapa de una pieza de rectángulo (x, y, ancho, alto) de un (original)de la imagen en un lienzo por el tamaño de la imagen original. Aquí está una foto que explicarlo mejor. enter image description here

Aquí es de otro, algo diferente, así que usted consigue una mejor idea:

enter image description here

Puedo escalar y mover la imagen sin embargo quiero. ¿Cómo puedo averiguar la escala para cambiar el tamaño de la imagen original.

Yo tenía una idea, que fue la figura más grande de la dimensión del rectángulo determinado, y utilizarla para calcular la escala, por lo que:

Dado: imageWidth, imageHeight, rectWidth, rectHeight, canvasWidth, canvasHeight (ignoremos los desplazamientos por ahora)

Pero eso no funciona en algunos casos. Así que me pregunto ¿cuál es la mejor manera de hacer esto. ,

6voto

freespace Puntos 9024

Si entiendo tu pregunta correctamente, entonces usted necesita para hacer esto:

scaleVert:=(rectHeight/rectWidht > canvasHeight/canvasWidth);
if scaleVert then
  scale:=canvasHeight/rectHeight
else
  slace:=canvasWidth/rectWidth;

El valor de la escala es la relación que usted tiene que aumentar la escala de la imagen.

La variable Booleana scaleVert se utiliza para probar si usted tiene que adaptarse a su rectángulo vertical (es decir, la altura del rectángulo después de escalar será la misma que la altura de la tela) o en horizontal.


Observe que si rectHeight/rectWidht = canvasHeight/canvasWidth , entonces no importa si se cambia la escala vertical o en horizontal, se puede obtener el mismo resultado. (Los dos rectángulos son semejantes.)

Si el rectángulo es más "fino" (es decir, la proporción rectHeight/rectWidht es mayor) tienes que escalar verticalmente y de lo contrario tienen que escalar horizontalmente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X