Ver Mensaje Individual
  #1  
Antiguo 29-01-2009
Rako Rako is offline
Miembro
 
Registrado: mar 2007
Posts: 39
Reputación: 0
Rako Va por buen camino
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
Responder Con Cita