PDA

Ver la Versión Completa : Porqur al asignar una imagen a un campo la pierdo ?


QuarkBcn
30-08-2007, 14:10:33
Hola foreros !!!

Tengo un campo BLOB en una tabla

Cargo la imagen, que se encuentra en un fichero externo

DBIc1.Picture.LoadFromFile(OpenDialog1.FileName);

Hasta aqui todo ok, la imagen se visualiza en el TDBImage, pero cuando quiero cargar dicha imagen en el campo para poder grabarla, esta desaparece, al hacer:

DBIc1.Field.Assign( DBIc1.Picture )

Se me queda el campo TDBImage en blanco y en el buffer no hay nada que grabar en la BD.

Cualquier orientacion sera bien recibida !!!

Gracias anticipadas a todos !!!

JosepGA
30-08-2007, 14:44:34
hola, yo lo que hago es asignar a la imagen a un componente tImage con:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)Image.Picture.LoadFromFile( sNombreArchivo );


luego cuando lo quiero asignar a la tabla lo hago de la siguiente forma:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)DBIc1.Picture.Graphic.Assign( Image.Picture.Graphic );
DBIc1.LoadPicture;


el hacerlo mediante un tImage lo hago ya que en ocasiones al hacerlo con un tDBImage me ha dado problemas, y haciendo pruebas de esta forma me lo hizo bien.

mightydragonlor
30-08-2007, 16:54:32
Igual te da ese problema si la imagen está en JPG, yo la convierto a BMP de 15bits al momento de guardarla y así no tengo ningún problema.

QuarkBcn
30-08-2007, 17:16:12
Si uso DBIc1.CopyFromClipboard funciona bien, aunque sea un JPG. El problema solo viene si hago la carga desde un fichero e intento asignarla al DBImage.

Saludos !!!

mightydragonlor
30-08-2007, 17:34:29
para ese caso haces lo que dice JosepGA

Image.Picture.LoadFromFile( sNombreArchivo );
DBIc1.Picture.Assign( Image.Picture);

Chris
30-08-2007, 18:05:56
Prueba este código

miTabla.Edit; //.....
TBlobField(miTabla.FieldByName('CampoImagen')).LoadFromFile(OpenDialog1.FileName);

....


en esencia ese es el código que creo yo te servirá

QuarkBcn
31-08-2007, 10:40:48
Varias cuestiones:

La solución de D&W me parece muy buena, pero solo funciona si la imagen es BMP. Con JPG da error.

La solucion de mightydragonlor, de pasar a BMP me parece interesante, y ya puestos me gustaria me orientaras como pasar a BMP un JPG. Pero en este caso no quiero cambiar la imagen.

Y la solución de JosepGA, es la que me ha funcionado correctamente.

Muchas gracias a todos por vtra colaboración.

Saludos !!!

mightydragonlor
31-08-2007, 16:55:02
De esta manera cambias el formato y la profundidad del la imagen a BMP, no altera el tamaño original.:)

function ToBMP(g: TGraphic): TBitMap;
begin
try
Result:=TBitmap.Create;
Result.Width:= g.Width;
Result.Height:= g.Height;
Result.Palette:=g.palette;
Result.PixelFormat:=pf15bit;
Result.Canvas.Draw(0,0,g);
except
Result:=nil;
end;
end;

fjcg02
31-08-2007, 22:56:36
Yo utilizo esto y me va bien. El código está asociado a un botón de cargar imagen.

OpenPictureDialog1.Execute;
if OpenPictureDialog1.Filename <> '' then
begin
if not (TMapas.State in [dsInsert,dsEdit]) then TMapas.Edit;
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.Filename);
end;
Saludos

QuarkBcn
03-09-2007, 10:26:51
Cierto, el código propuesto por fjcg02, funciona perfectamente. Muchas gracias.

Y gracias a mightydragonlor, por la function ToBmp. Por cierto solo me queda una duda, no es necesario liberar el puntero a TBitmap.Create ???

Saludos !!!

mightydragonlor
04-09-2007, 02:43:41
No, por que si te fijas es el result y si lo liberas tendras un error por que no existiria el resultado de la función;

QuarkBcn
04-09-2007, 10:10:14
No, si eso lo entiendo, pero eso significa que ese puntero se libera automáticamente ???

Saludos !!!