Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Crear un thumbnail rapido (https://www.clubdelphi.com/foros/showthread.php?t=63094)

Rako 29-01-2009 14:27:35

Crear un thumbnail rapido
 
Hola buenas,

Tengo una imagen en un fichero, una imagen grande, y la quiero convertir a una imagen pequeña (a una escala de como maximo 70 pixeles) para luego grabarla a jpg.

Para ello he probado varias formas de conseguirlo pero todas me parecen muy lentas...y cuano veia una posible opcion rapida no me deja, supongo q sera porque habra propiedades read only o hare algo mal o no se...he probado con componentes tipo jpeg,bmp,imageenproc,tiebitmap...... no se bien como hacerlo, pegare un poco de codigo:

var
scale: Integer;
jpg: TJpeg;
iebmp: tIEBitmap;

//cargo la imagen
jpg := TJpegImage.Create;
jpg.LoadFromFile(filename);

//simplemente busco la escala para dimensionar, poner la anchura o la altura a 70, y la otra en relacion.
if jpg.Height > jpg.Width then begin
scale := 70 / jpg.Height;
end else begin
scale := 70 / jpg.Width;
end;

//Esto si uso el jpeg para escalarlo
jpg.Height:=Round(jpg.Height * scale);
jpg.Width:=Round(jpg.Width * scale);

//si uso un iebitmap las dos lineas de arriba sobrarian y seria
iebmp:=TIEBitmap.Create(Round(jpg.Width * scale),Round(jpg.Height * scale));
iebmp.Canvas.StretchDraw(iebmp.Canvas.ClipRect, jpg);

Jpg:=TJpegImage.Create;
jpg.Assign(iebmp.VclBitmap);
jpg.SaveToFile('tmp_thumb.JPG');


Hacer cosas asi funciona pero es bastante lento...no hay un modo mas rapido? Con imageenproc parecia que se podia con el metodo resample, pero no he sabido cargar la imagen de un modo eficiente, tiene un imageenproc.bitmap.loadfromfile (o algo asi) que me peta....


gracias y un saludo

Neftali [Germán.Estévez] 29-01-2009 16:25:00

Hola.
Antes de nada comemtarte, que cuando añadas código Delphi lo hagas entre los TAG's correspondientes.

En cuanto a la pregunta, revisa la sección de trucos del club, porque creo que hay alguno al respecto.

pato89xd 20-04-2011 04:15:39

hola, encontre ese truco pero no se como implementar el procedimiento que se muestra ahi, es este http://www.clubdelphi.com/trucos/ind...=120&scrollb=0 me podrias decir como?, gracias =)

Neftali [Germán.Estévez] 20-04-2011 09:49:46

Al final del truco tienes un par de ejemplos de cómo hacer la llamada.
También puedes revisar en mi blog la entrada sobre "Antialiasing"; Hay código para generar miniaturas de una imagen.

pato89xd 20-04-2011 10:20:59

hola, gracias por tu respuesta, pero el problema no es al ahcer la llamada, sino dodne colocar el codigo en si :s, no la llamada si no el procedimiento

Neftali [Germán.Estévez] 20-04-2011 11:17:25

Pues justo encima del otro. Como la llamada está en esa misma Unit no hay que definir nada más.


La franja horaria es GMT +2. Ahora son las 21:45:05.

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