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 !!!
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.