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 // Después de moverse x el DataSet (ej. en un DBGRid) // actualiza la información //------------------------------------ //------------------------------- Meter la Imagen al Image1 -------------- try // Vacía la imagen por si esa fila no contiene imagen; pues // de no hacerlo, se vería la imágen de la última ficha que sí tenía imagen Ppal.image1.Picture.Assign ( NIL ) ; MS1 := TMemoryStream.Create ; DSetBlobImag.SaveToStream (MS1) ; MS1.Position := 0 ; if MS1.Size > 0 // Si el campo contiene alguna información then begin JPEG1 := TJpegImage.Create; JPEG1.LoadFromStream( MS1 ); if not JPEG1.Empty // Si tiene contenido, lo copia 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 //=========== GUARDAR IMAGEN en el campo blob ====================== TRY MS1 := TMemorySTream.create ; if (image1.Picture.Height > 0 ) or // IMAGE1 no está vacía (image1.Picture.Width > 0 ) then begin image1.picture.Graphic.SaveToStream (ms1) ; ms1.Position := 0 ; DModule1.DSetBLOBIMAG.LoadFromStream ( ms1 ) ; end else // IMAGE1 está vacía 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.