Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Cambiar tamaño de una imagen antes de guardar en una bd (https://www.clubdelphi.com/foros/showthread.php?t=31527)

chux 10-05-2006 17:52:24

Cambiar tamaño de una imagen antes de guardar en una bd
 
Veamos, estoy usando JVDBImage (de jedi) para guardar imagenes en una bd (campo tipo blob).
La imagen la guardo de esta manera
jvdbimage1.picture.loadfromfile('loquesea.xxx');

De esa forma puedo guardar bmp, jpgs, todo funciona bien.

...pero claro, antes de guardarla necesitaria reducir su tamaño

Lo que he visto por el foro es todo para bmps, sobre jpgs no he logrado encontrar nada.

Venga saludos

dec 10-05-2006 18:33:23

Hola,

No sé hasta qué punto podría servir en este caso, pero, suele verse en los algoritmos que trata con imágenes JPG con Delphi, utilizan en realidad dos objetos: "TBitmap" y "TJpegImage".

Es decir, tú cargas la imagen en un objeto "TBipmap" y haces lo que tengas que hacer con la imagen, en este caso reducir su tamaño... luego de eso puedes cargar la imagen en un "TJpegImage" y guardarla ya a partir de ahí.

¿Se comprende? Ya digo que no sé si te servirá en tu caso en concreto, pero, piensa en lo que he dicho. Necesito cambiar el tamaño de una imagen y necesito esa imagen en formato JPG. Cargo la imagen en un "TBitMap" y trabajo sobre ella; luego cargo la imagen en un "TJpegImage" y punto pelota.

Nota: El tipo "TJpegImage" puede llamarse de otro modo. Mi memoria puede fallar fatalmente.

seoane 10-05-2006 18:48:03

Con el permiso de dec voy a añadir un poco de codigo a la explicacion que te dio.

Código Delphi [-]
uses JPEG;

procedure Redimensionar(Imagen: TJPEGIMage; Ancho, Alto: Integer);
var
  Bitmap: TBitmap;
begin
  Bitmap:= TBitmap.Create;
  try
    Bitmap.Width:= Ancho;
    Bitmap.Height:= Alto;
    Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect,Imagen);
    Imagen.Assign(Bitmap);
  finally
    Bitmap.Free;
  end;
end;

Para usar esta funcion solo tienes que pasarle como parametros la imagen y las nuevas dimensiones. Algo asi:

Código Delphi [-]
var
  Jpg: TJPEGImage;
begin
  Jpg:= TJPEGImage.Create;
  try
    Jpg.LoadFromFile('C:\Original.jpg');
    Redimensionar(Jpg,100,100);
    Jpg.SaveToFile('C:\Copia.jpg');
  finally
    Jpg.Free;
  end;
end;

O como en tu caso algo asi:
Código Delphi [-]
var
  Jpg: TJPEGImage;
begin
  Jpg:= TJPEGImage.Create;
  try
    Jpg.LoadFromFile('loquesea.xxx');
    Redimensionar(Jpg,100,100);
    jvdbimage1.picture.Assign(Jpg);
  finally
    Jpg.Free;
  end;
end;

dec 10-05-2006 18:55:30

Hola,

Cita:

Empezado por seoane
Con el permiso de dec voy a añadir un poco de codigo a la explicacion que te dio.

Eso, eso, y sin mi permiso también, que así quedan las cosas mucho más claras. :)

chux 10-05-2006 20:14:35

vale gracias, mañana en cuanto llegue al curro lo pruebo, pero fijo que va ;)

ingel 24-11-2006 14:14:30

me ha interesado este hilo ...
 
lo que yo necesitaria es redimensionar pero trabajando con el 'peso' de la impagen..por ej. levanto imagenes de 10 MB y necesito grabarlas en menos de 900K.. se puede hacer algo asi?
Perdon si no corresponde aqui la pregunta .. pero como los aqui presentes han lidiado con esto ...
sds
Ingel

Neftali [Germán.Estévez] 28-11-2006 11:58:58

También se puede echar un vistazo a la sección de trucos del ClubDelphi.


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

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