Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
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
  #2  
Antiguo 10-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Yo lo hago de forma similar con dbExpress y no tengo problemas. Por lo que no es que solo funcione con BDE. Además debería funcionar correctamente con IBO también, pero no puedo probarlo.

Comprueba con el depurador que se ejecuta correctamente todo el código, y si te sale algún error, dínos cual es y quizá te podamos ayudar.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 11-06-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
Gracias por la respuesta pero ya tomé otro camino. Me pase una mañana entera intentando hacer funcionar esto y no hubo manera. Decidí comprar un componente (KDImage 59€) que además de automatizar esto permite retocar la imagen, girarla, etc..
En ocasiones los problemas son los que te llevan a las mejores soluciones.
Gracias de nuevo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:42:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi