PDA

Ver la Versión Completa : Ajustar (Stretch) & Centrar Imagen En TImage Dentro de ScrollBox


Beaker_
22-05-2012, 02:31:59
Buena tarde. Quisiera saber si alguién me pudiera ayudar en un par de problemas que tengo.
Esta es mi situación:
Tengo que hacer un programa el cual cargue una imagen en un TImage (lo cual ya hago) y aplicarle zoom de acuerdo a la entrada del usuario.
La imagen inicialmente la ajusto al TImage (propiedad Stretch) para que se vea bien y completa.
Este TImage está dentro de un ScrollBox para cuando se tenga que hacer zoom.
Cuando el usuario quiere hacer zoom, le cambio las propiedades al TImage, para que se pueda ver la imagen con base a la escala de Zoom, y como está dentro de un ScrollBox, tiene las barras para recorrer la imagen


imagen.Stretch := False;
imagen.AutoSize := True;


Mi primer problema es, cómo mantener centrada la imagen dentro del ScrollBox?
La otra situación es que el usuario puede "restaurar" la vista para que se vea de la manera inicial, es decir, Stretch/Ajustada, por lo cual cambio de nuevo los valores como muestro abajo.
Sin embargo, la imagen se sigue viendo grande (ya que es más grande que el TImage), con las barras de ScrollBox y sin aplicar Stretch. Será que después de desactivar el Stretch y activar el Autosize, ya no se puede restaurar?


imagen.AutoSize := False;
imagen.Stretch := True;

ElDioni
22-05-2012, 13:13:53
Hola,

para centrar la imagen tendrás que jugar con el top y el left de la imagen y con el heigth y width del scrollbox para ir centrando la imagen según vaya aumentando y disminuyendo.
El stretch lo que hace es ajustar la imagen que cargas al tamaño del objeto TImage, no al revés, tienes la opción proportional para conseguir que la imagen no pierda sus proporciones originales y no esté deformada pero tampoco te va a cargar la imagen a su tamaño original, cuando cargas la imagen al principio, puedes cargar sus valores de width y height en unas variables y cuando pulsen restaurar cargar el valor de esas variables.

Saludos.

Beaker_
22-05-2012, 16:24:44
Muchas gracias por tu respuesta, la cuestión es que si podía yo restaurar el stretch después de ampliar la imagen usando el scroll, el problema era que no me mostraba el scroll horizontal. Una vez que hice más grande el scroll para así poder ver la barra horizontal, lo cual si funcionó, dejé de poder restaurar la imagen, por lo cual si se ha de poder, pero no sé si tengo que cambiar las propiedades del scroll o que sucede... Gracias

Caro
22-05-2012, 17:36:57
Muchas gracias por tu respuesta, la cuestión es que si podía yo restaurar el stretch después de ampliar la imagen usando el scroll

Hola Beaker_, si utilizas solo la propiedad Strech si se puede sobre el mismo tamaño del TImage, pero si queres ampliar tendrías que asignar tu, su nuevo Width y Heigth y al restaurar lo mismo, si utilizas el AutoSize no se puede restaurar al tamaño original, tienes que guardar en alguna variable su Width y Height inicial como te indica ElDioni, y estaríamos en lo mismo si utilizaramos solo Strech.

Para que parezca centrado puedes utilizar la propiedad Margin de tu ScrollBox.


aWidth := imagen.Width;
aHeigth := imagen.Height;
ScrollBox1.VertScrollBar.Margin := imagen.Top;
ScrollBox1.HorzScrollBar.Margin := imagen.Left;
imagen.Stretch := False;
imagen.AutoSize := True;

//Parar restaurar
imagen.AutoSize := False;
imagen.Stretch := True;
imagen.Width := aWidth;
imagen.Height := aHeigth;
ScrollBox1.VertScrollBar.Margin := 0;
ScrollBox1.HorzScrollBar.Margin := 0;


Saluditos