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 |
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. |
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 =)
|
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. |
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
|
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 16:34: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