Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   agrandar Imagen en delphi7 (https://www.clubdelphi.com/foros/showthread.php?t=87240)

emeritos 03-12-2014 08:44:48

agrandar Imagen en delphi7
 
Hola Dilferos.
Necesito hacer una pequeña cosa, tengo un campo longbolb, donde tengo una imagen. Necesito agrandar mas esa imagen, es decir, que el usuario pueda pasar una lupa por encima de ella y agrandar mas la imagen o parte de ella (por donde pasa la lupa). Espero haberme explicado bien.

Gracias.

Neftali [Germán.Estévez] 03-12-2014 10:48:09

Decir que seguro que hay componentes para realizar esto, de todas forma si deseas hacerlo "a mano", no creo que sea complicado.

Se trata de utilizar un canvas (podría ser otro TImage) y para cada pixel (color) de la imagen original pintar 2 (por ejemplo) iguales, en la imagen destino (que será la lupa).

Neftali [Germán.Estévez] 03-12-2014 11:22:43

1 Archivos Adjunto(s)
He realizado un par de pruebas para ver si realmente se solventaba el problema utilizando lo comentado y parece que sí.
Aquí puedes ver cómo funciona...



El ejemplo está en el FTP del club y como adjunto.

emeritos 03-12-2014 11:47:19

Muchas gracias.

Lo he probado y puede valer aunque es un poco lento, pero es una manera de empezar.

Reitero las gracias.

Neftali [Germán.Estévez] 03-12-2014 12:34:35

A veces no nos paramos a pensar las cosas y el primer resultado, aunque funciona, no es óptimo.
Seguramente esto sea lo que me ha pasado a mí esta vez.

Luego he pensado que tal vez sea más efectivo (puedes probarlo y comentarlo) utilizar los métodos de TCanvas disponibles.
TCanvas, posee el método para copiar una porción de un Canvas a otro. Es el método CopyRect. Esa porción de Canvas se copia utilizando el modo CopyMode .

De esta forma si pones un botón en el form y colocas el siguiente código:

Código Delphi [-]
var
  sRect, dRect:TRect;
begin
  // esto solo es para "limpiar" la zona destino
  FormShow(nil);
  // definimos los 2 rectángulos; el destino es el doble del original
  sRect.Left := 0; sRect.Top := 0; sRect.Right := 40; sRect.Bottom := 40;
  dRect.Left := 0; dRect.Top := 0; dRect.Right := 80; dRect.Bottom := 80;
  // Copiamos una zona entre canvas
  Image2.Picture.Bitmap.Canvas.CopyRect(dRect, Image1.Picture.Bitmap.Canvas, sRect);

Verás que se copia una poción de la imagen superior (Image1 - 40x40) en la imagen inferior (Image2) con un tamaño del doble (80x80), con lo que conseguimos un efecto de lupa.

Neftali [Germán.Estévez] 03-12-2014 12:45:09

1 Archivos Adjunto(s)
Probado y efectivamente no hay color:



Link a la segunda versión (CopyRect) en el FTP.


La franja horaria es GMT +2. Ahora son las 04:48:53.

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