Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Porqur al asignar una imagen a un campo la pierdo ? (https://www.clubdelphi.com/foros/showthread.php?t=47523)

QuarkBcn 30-08-2007 14:10:33

Porqur al asignar una imagen a un campo la pierdo ?
 
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 [-]Image.Picture.LoadFromFile( sNombreArchivo );


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

Código Delphi [-]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
Código Delphi [-]
Image.Picture.LoadFromFile( sNombreArchivo );
DBIc1.Picture.Assign( Image.Picture);

Chris 30-08-2007 18:05:56

Mejor utiliza el TBlobField
 
Prueba este código
Código Delphi [-]
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.:)

Código Delphi [-]
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.

Código Delphi [-]
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 !!!


La franja horaria es GMT +2. Ahora son las 19:14:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi