Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Zoom en la imagen (https://www.clubdelphi.com/foros/showthread.php?t=55791)

fasthorse 26-04-2008 12:47:02

Zoom en la imagen
 
Hola, estoy haciendo 2 funciones para cambiar el zoom de la imagen, y me pasa que el zoom - siempre me aumenta, al igual que el zoom +, éstos son los códigos que tengo:

En el zoom +

Imagen->Height= Imagen->Picture->Height;
Imagen->Width=Imagen->Picture->Width;
Imagen->Height = Imagen->Height*2;
Imagen->Width = Imagen->Width*2;

En el zoom -

Imagen->Height= Imagen->Picture->Height;
Imagen->Width=Imagen->Picture->Width;
Imagen->Height = Imagen->Height/2;
Imagen->Width = Imagen->Width/2;

Además de lo q siempre me aumenta, quisiera que cada vez que se pulse el botón aumentara su tamaño, al igual que para dismunuir, que solo me lo hace la primera vez...

Y ya una última preguntita, la propiedad de monocrhoma del bitmap, es para que te ponga la imagen en escalas de grises?? pq a mi me la pone toda en negra...

Gracias.
Saludos.

Northern 28-04-2008 17:51:25

Monocromo se aplica a dos colores negro-blanco, negro-verde, etc.

Para hacer zoom sobre una imagen yo buscaría en google por "stretch image delphi" o algo así. Hay muchos ejemplos y esas funciones tienen la ventaja de que mantienen la proporcionalidad (aspect ratio) de la imagen.



Saludos

cHackAll 28-04-2008 18:50:32

Le doy la razón a Northern, para amodificar el tamaño de la IMAGEN y no así del "componente" te aconsejo revisar la API o método Canvas.CopyRect; un ejemplo de escala de grises y otro ejemplo de acceso a gráficos.


Saludos

fasthorse 29-04-2008 09:22:11

Si, pero lo que me parece más raro haciendo el zoom menos, es que teniendo esto:

Imagen->Height=Imagen->Height/2;
Imagen->With=Imagen->With/2;

Siempre aumenta el tamaño del ancho y el alto de la imagen, y no se por qué... lo he depurado y veo que aumentan los valores, en vez de ser reducidos... cosa rarísimaa porque mira que le pongo que se divida entre 2. Y he mirado más ejemplos en Internet, pero más o menos son así y no me funcionan :(, y otra cosa que me pasa es que solo me aumenta una vez, la primera, no cada vez que le doy al botón... ¿será por alguna propiedad de la imagen? Aunque creo q las tengo bien puestas, tengo el Strech y proporcional a True, y el autosize también a True...
Es que por más vueltas que le doy... no se por qué me aumenta si le estoy diviendo su tamaño.

Gracias y saludos.

cHackAll 29-04-2008 16:04:29

Cita:

Empezado por fasthorse (Mensaje 283173)
...tengo el Strech y proporcional a True, y el autosize también a True...

Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Imagen->Picture->LoadFromFile("c:\\windows\\\Zapotec.bmp");
 Imagen->Height = Imagen->Picture->Height;
 Imagen->Width /= 2;
 Imagen->Width /= 2;
}

Stretch = True
AutoSize = False
Proportional = False


Saludos

fasthorse 29-04-2008 19:34:13

Nada, con ese mismo código y esas mismas propiedades sigue aumentandome con el zoom menos, y solo me deja hacer una vez la operación, vamos q sigo igual...

Saludos.

JoysticK 07-08-2008 14:32:18

A ver te pongo el codigo que yo utilizo y me funciona perfectamente:
Creo dos variables al cargar la imgen, tipo Integer, almacenando el Ancho y el Alto de la imagen original...

Un componente TImagen, con las propiedades
Código:

Autosize := False;
Strethc := True;
Proportional := True;

en el FormShow: (Con la imagen ya cargada en el picture)

Código:

Imagen.AutoSize := True;
Alto := Imagen.Width;
Ancho := Imagen.Height;

Despues le he puesto un slider (Zoom) y un Label (xzoom) y en el onchange del slider este codigo:

Código:

    Imagen.AutoSize := False;
    Imagen.Height := Round(Ancho * (Zoom.Value/100) );
    Imagen.Width := Round(Alto * (Zoom.Value / 100) );
    xzoom.Caption := '>> ZOOM ' + IntToStr(Zoom.Value) + ' % <<';


Pruebalo y me cuentas, a mi me funciona...


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

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