Ver Mensaje Individual
  #7  
Antiguo 06-10-2010
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Reputación: 23
rrf Va por buen camino
Wink

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.
Responder Con Cita