Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Dibujar sobre Timagen (https://www.clubdelphi.com/foros/showthread.php?t=38353)

eljose 12-12-2006 12:18:12

Dibujar sobre Timagen
 
Hola, no sabía cómo resumir la pregunta en el título.

Tengo un Timage que tiene la propiedad Strech a true, de tal forma que se adapta al tamaño del form. Si dibujo sobre ella un rectángulo de 100x100 píxeles se dibuja bien, pero si cambio el tamaño del form, el rectángulo se deforma.
Lo que yo quiero es que lo que dibuje sobre la imagen no se deforme. Para eso redibujo el rectángulo en cada evento Onresize del Tform. La orden siempre es que dibuje 100x100 pixeles, pero lo sigue dibujando deformado.

La orden para dibujar el rectangulo es Rectangle(10,10,110,110) al parecer lo toma como píxeles de la imagen y si esta es deforma, escala las distancias.

¿Alguna idea? Gracias.

Crandel 12-12-2006 13:21:17

Cita:

Empezado por eljose
¿Alguna idea? Gracias.

Pon Strech = false

eljose 12-12-2006 14:32:46

No, porque quiero que la imagen se adapte a la pantalla.
Lo que quiero es poder dibujar sobre ella con un tamaño en pixeles real, no relativo al tamaño de la imagen.

Crandel 12-12-2006 15:03:45

Strech lo que hace es justamente que tu imagen independiente del tamanio, ocupe toda la pantalla, eso deforma la imagen si el el tamanio de la imagen no es igual al tamanio del TImage.

Ahora si lo que quieres es que la imagen se adapte a la pantalla, no lo hagas con Strech sino modificando las propiedades del tamanio de la imagen

eljose 12-12-2006 19:46:53

Gracias,

Creo que lo que haré será redimensionar el Timage en el evento Onresize del TForm.

Crandel 12-12-2006 23:42:15

El tema es asi, el TImage no hace falta redimensionarlo manualmente, lo puedes hacer con la propiedad Align poniendola en alClient y listo, se adapta al tamaño del formulario o del espacio que le hayas dado.

El tema es la imagen que contiene. Si prestas atención al programa Paint de windows, veras que crea una imagen de tamaño definido y no lo redimensiona, dado que te puede llevar a problemas.

xq ? al agrandar el tamaño de la imagen no hay problema dado que agregaras a la imagen espacio en blanco, pero si la achicas entonces borraras parte del dibujo.

Lo mejor, es definir un tamaño de imagen que se adapte mejor a lo que tu situacion y permitirle al usuario modificarlo manualmente.

seoane 12-12-2006 23:56:39

Bueno, una solución es corregir las coordenadas para que se ajuste a la imagen "Streachada", por ejemplo:
Código Delphi [-]
function AImgX(Imagen: TImage; x: integer): integer;
begin
  Result:= (x * Imagen.Picture.Width) div Imagen.Width;
end;

function AImgY(Imagen: TImage; y: integer): integer;
begin
  Result:= (y * Imagen.Picture.Height) div Imagen.Height;
end;

// Para dibujar en la imagen un recuadro de 100x100
Image1.Canvas.Rectangle(AImgX(Image1,10),AImgY(Image1,10),
    AImgX(Image1,110),AImgY(Image1,110));
Lo malo es que como la imagen esta deformada puede que los bordes del recuadro no aparezcan definidos, pero eso ya no lo podemos remediar.

Otra solución, es no dibujar sobre la imagen. Puedes colocar un TPaintBox del mismo tamaño encima del TImage, y dibujar sobre el.

eljose 13-12-2006 11:01:58

Gracias, investigaré lo del Paintbox.

Lo que quiero hacer es un lienzo sobre el que dibujar en ejecución, pero no dibuja el usuario, sino el programa. Y se adapta a las dimensiones del lienzo pero sin deformar, redibujando cada vez. Dibuja unos símbolos cuadrados de tamaño fijo y si el lienzo es más grande mete más en cada línea.
¿Debo usar un Timage o hay algo más adecuado?


La franja horaria es GMT +2. Ahora son las 23:14:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi