Ver Mensaje Individual
  #8  
Antiguo 24-03-2011
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 416
Reputación: 17
bulc Va por buen camino
Cita:
Empezado por rrf Ver Mensaje
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.
Hola. ¿Serviría este código para un campo ADO-Access. No consigo sacar un gráfico de la Tabla y verlo. Intento hacerlo en un TImage, pasando el campo a un TADOBlobStream, para dimensionarlo.
¿Puedes sugerirme algo?
Responder Con Cita