PDA

Ver la Versión Completa : Reducir tamaño de imagen de un dbimage


Walterdf
10-11-2004, 21:59:48
Buenas

Estoy trabajando en un programa que inserta figuras de archivos .jpg a una tabla Paradox. La parte de la inserción ya la terminé y funciona bien pero ahora quisiera que antes de insertar la imagen en el DBImage, que la reduzca de tamaño. Se me ocurre utilizar un objeto TJpegImage y aplicar las propiedades CompressQuality y Compress (según lo que vi en otro hilo), el problema es que quisiera manipular la imagen en el ClipBoard y no mediante archivos y no tengo muy claro como se manejan esas propiedades.
Si alguien puede ayudarme o tiene otra sugerencia se lo agredeceré.
Saludos.
Muchas gracias.

Walter

Neftali [Germán.Estévez]
11-11-2004, 11:00:10
...que la reduzca de tamaño. Se me ocurre utilizar un objeto TJpegImage y aplicar las propiedades CompressQuality y Compress (según lo que vi en otro hilo), el problema es que quisiera manipular la imagen en el ClipBoard y no mediante archivos
No tengo claro si al reducir "al tamaño de la imagen" te refires al ancho y al alto o al tamaño del fichero (supongo que es éste segundo, por lo que comentas de compresión -CompressQuality -), pero me da la impresión de que para ninguno de los dos casos "necesitas" utilizar ni ficheros ni el ClipBoard.
No acabo de entender a qué te refieres con "quisiera manipular la imagen en el ClipBoard"; El portapapeles simplemente es un lugar que almacena información, no se usa para manipular cosas; Lo que sí puedes hacer es realizar el trabajo que quieres (reducir el tamaño) y luego copiar el resultado al Clipboard; Para allo puedes utilizar los métodos de la clase TJpegImage, LoadFromClipboardFormat y SaveToClipboardFormat.

Si no es ésto lo que quieres, tal vez aclararía más que quieres decir con lo de "usar el clipboard" y algo de código.

Walterdf
11-11-2004, 12:39:18
Hola Neftali,
Ante todo, gracias por haberme respondido.
Perdón por la falta de claridad en mi consulta, tenés razón, lo escribí apurado y así salió.
Lo que necesito hacer es reducir el peso de la imagen bajandole un poco la calidad y pensé en hacerlo con las propiedades que nombré antes, CompressQuality.
Cuando hablo del ClipBoard me refiero a que no necesito guardar la figura modificada en un archivo, el programa debería hacer lo siguiente, abrir el archivo .jpg, reducir el peso de la imagen y pegarla en el dbimage. Calculo que para esto utilizaría las propiedades SaveToClipBoardFormat y LoadFromClipBoardFormat y no entiendo del todo los parámetros que deben llevar.
Espero haber aclarado un poco el objeto de mi consulta y si puedes darme una mano con algún código de ejemplo te lo agradeceré.
Un saludo
Walter

Neftali [Germán.Estévez]
11-11-2004, 13:17:39
...el programa debería hacer lo siguiente, abrir el archivo .jpg, reducir el peso de la imagen y pegarla en el dbimage...
Mejor explicado ahora, dónde va a parar...;)
Un comentario sólo, en lugar de "pegarla" en el DBImage, debes pegarla en el campo asociado del Dataset, que es el que tiene el dato, el DBImage símplemente "muestra" lo que hay en el DataSet.


...Calculo que para esto utilizaría las propiedades SaveToClipBoardFormat y LoadFromClipBoardFormat y no entiendo del todo los parámetros que deben llevar.
Como ya te comenté, para hacer lo que pides no se necesita utilizar el Clipboard para nada, puedes hacerlo con objetos.


var
jpg:TJpegImage;
begin
// Crear el objeto JPG
jpg := TJpegImage.Create;
try
// Asignar de un TImage o Leer de disco
jpg.Assign(Image1.Picture);
// CAmbiar compresión y comprimir
jpg.CompressionQuality := jpg.CompressionQuality DIV 2;
jpg.Compress;
// Asignar a otro Image
Image2.Picture.Assign(jpg);
// Para comprobar sólo; grabar las nuevas imágenes desde jpg y TImage2
// y comprobar el tamaño en disco
Image2.Picture.SaveToFile('c:\temp\out-Timage.jpg');
jpg.SaveToFile('c:\temp\out-jpg.jpg');
finally
jpg.Free;
end;

Walterdf
11-11-2004, 14:20:33
Muchas gracias Neftali, funcionó de maravillas!!!
De todos modos y si no es mucho molestia, me gustaría saber exactamente como funcionan las propiedades SaveToClipBoardFormat y LoadFromClipBoardFormat, simplemente me quedé con la curiosidad.
Un abrazo y gracias.
Walter