Ver Mensaje Individual
  #1  
Antiguo 03-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Reputación: 22
apicito Va por buen camino
Almacenamiento de Iágenes en Base de Datos

Utilizo Firebird 1.00 con componentes de acceso IBO 4. Estoy utilizando el siguiente procedimiento para cargar y visualizar las imagenes:
Código:
PARA CARGAR:
procedure TExp700.BotonCargar(Sender: TObject);
var
  Jpg: TJpegImage;
  Stream: TMemoryStream;
  FileExt: string;
  GraphType: TGraphType;
begin
if OpenPicture.Execute then
  begin
    Jpg := nil;
    Stream := nil;
    try
      Stream := TMemoryStream.Create;
      FileExt := LowerCase(ExtractFileExt(OpenPicture.FileName));
      if (FileExt = '.bmp') or (FileExt = '.dib') then
        begin
          GraphType := gtBitmap;
          Stream.Write(GraphType, 1);
          with Imagen.Picture.Bitmap do
            begin
              LoadFromFile(OpenPicture.FileName);
              Imagen.Picture.Bitmap.SaveToStream(Stream);
            end;
        end
      else if (FileExt = '.ico') then
        begin
          GraphType := gtIcon;
          Stream.Write(GraphType, 1);
          with Imagen.Picture.Icon do
            begin
              LoadFromFile(OpenPicture.FileName);
              Imagen.Picture.Bitmap.SaveToStream(Stream);
            end;
        end
      else if (FileExt = '.emf') or (FileExt = '.wmf') then
        begin
          GraphType := gtMetafile;
          Stream.Write(GraphType, 1);
          with Imagen.Picture.Metafile do
            begin
              LoadFromFile(OpenPicture.FileName);
              Imagen.Picture.Bitmap.SaveToStream(Stream);
            end;
        end
      else if (FileExt = '.jpg') or (FileExt = '.jpeg') or (FileExt = '.jpe') then
        begin
          Jpg := TJpegImage.Create;
          Jpg.LoadFromFile(OpenPicture.FileName);
          Imagen.Picture.Assign(Jpg);
          GraphType := gtJpeg;
          Stream.Write(GraphType, 1);
          Jpg.SaveToStream(Stream);
        end;
    Stream.Position := 0;
    TBlobField(QueryTra.FieldByName('EXPTRA_TEXTO')).LoadFromStream(Stream);
    except
      jpg.Free;
      Stream.Free;
      raise;
    end;
    jpg.Free;
    Stream.Free;
  end;
end;

PARA VISULIZAR

procedure TExp700.QueryTraAfterScroll(DataSet: TDataSet);
var
Stream: TMemoryStream;
Jpg: TJpegImage;
GraphType: TGraphType;
begin inherited;
  Jpg := nil;
  Stream := nil;
  try
    Stream := TMemoryStream.Create;
    TBlobField(QueryTra.FieldByName('EXPTRA_TEXTO')).SaveToStream(Stream);
    if Stream.Size > 0 then
      begin
        Stream.Position := 0;
        Stream.Read(GraphType, 1);
        case GraphType of
          gtBitmap: Imagen.Picture.Bitmap.LoadFromStream(Stream);
          gtIcon: Imagen.Picture.Icon.LoadFromStream(Stream);
          gtMetafile: Imagen.Picture.Metafile.LoadFromStream(Stream);
          gtJpeg:
            begin
              Jpg := TJpegImage.Create;
              Jpg.LoadFromStream(Stream);
              Imagen.Picture.Assign(Jpg);
            end
        else
          Imagen.Picture.Assign(nil);
        end;
      end
    else
      Imagen.Picture.Assign(nil);
  except
    Showmessage('Non se poido');
    Imagen.Picture.Assign(nil);
  end;
  jpg.Free;
  Stream.Free;
end;
El procedimiento de carga funciona correctamente pero el de visualización no carga la imagen en "Imagen", que es un TImage. Llevo todo el día dandole vueltas y no consigo ver que es lo que falla. Me queda la sospecha de que este procedimiento solo funcione con el BDE, ya que en algún sitio he leido algo al respecto.
Alguien puede ayudarme?
Responder Con Cita