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
|