Hola.
Aquí te incluyo 2 ejemplos de código para guardar desde un TIBDataset (campo blob) a un TImage y viceversa.
Son sacados de un programa que hice hace mucho tiempo para practicar y aprender a usarlo y espero que te sean útiles.
El primer ejemplo es para guardar la imagen desde un campo Blob a un TImage y se pone en marcha cuando se cambia de una ficha a otra, por ejemplo, en un DBGrid:
Código Delphi
[-]
uses Jpeg, ... ;
...
procedure TDModule1.DSetAfterScroll(DataSet: TDataSet);
var
MS1 : TMemoryStream ;
JPEG1 : TJPEGImage;
begin
try
Ppal.image1.Picture.Assign ( NIL ) ;
MS1 := TMemoryStream.Create ;
DSetBlobImag.SaveToStream (MS1) ;
MS1.Position := 0 ;
if MS1.Size > 0 then
begin
JPEG1 := TJpegImage.Create;
JPEG1.LoadFromStream( MS1 );
if not JPEG1.Empty then Ppal.image1.Picture.Assign ( JPEG1 ) ;
end ;
finally
JPEG1.Free;
MS1.Free;
end;
end;
Este es para guardar la imágen desde el TImage al campo blob:
Código Delphi
[-]
procedure TEdita_Reg.BConfirmarClick(Sender: TObject);
var
MS1 : TMemoryStream ;
begin
TRY
MS1 := TMemorySTream.create ;
if (image1.Picture.Height > 0 ) or (image1.Picture.Width > 0 )
then
begin
image1.picture.Graphic.SaveToStream (ms1) ;
ms1.Position := 0 ;
DModule1.DSetBLOBIMAG.LoadFromStream ( ms1 ) ;
end
else DModule1.DSetBLOBIMAG.Clear ;
FINALLY
MS1.free;
END ;
DModule1.DSet.Post ;
DModule1.Transac.CommitRetaining ;
end;
El código original lo obtuve buscando mucho en este foro e internet y lo adapté un poco.
Quizás se ajuste a lo que buscas, aunque creo que lo normal es usar los
componentes TDBImage que ahorran mucho código porque enlazan directamente con el IBDataset.
Salu2.