Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como mostrar una imagen a base de un componente (https://www.clubdelphi.com/foros/showthread.php?t=27694)

Nelly 28-11-2005 18:49:26

como mostrar una imagen a base de un componente
 
Hola, tengo problemas con mostrar las fotografias de una base de datos(firebird), estoy desarrollando en delphi 7, tengo el siguiente codigo:

Código Delphi [-]
 procedure TfrmFotografias.btnagregarClick(Sender: TObject);
 var
    mijpg:TJPEGImage;
 begin
      if((qryMiembros.Active) and (not qryMiembros.IsEmpty)) then begin
          qryInsFoto.ParamByName('cve_rnm').AsString:=
          qryMiembros.FieldByName('cve_rnm').AsString;
           if OpenPictureDialog1.Execute then begin
              Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
              mijpg:=TJPEGImage.Create;
              mijpg.Assign(Image1.Picture.Graphic);
               if uppercase(copy(ExtractFileExt(OpenPictureDialog1.FileName),1,3))<>'.JP'
               then begin
                 mijpg.CompressionQuality:=30;
                 mijpg.Compress;
               end;
                 mijpg.SaveToFile('c:\temp.jpg');
                 //qryInsFoto.ParamByName('foto').LoadFromFile(OpenPictureDialog1.FileName,ftBlob);
                 qryInsFoto.ParamByName('foto').LoadFromFile('c:\temp.jpg',ftBlob);
                //qryInsFoto.ParamByName('foto').Assign(mijpg);
                 qryInsFoto.ExecSQL;
                 mijpg.Free;
                 qryFotos.Active:=false;
                 qryFotos.ParamByName('cve_rnm').AsString:=
                 qryMiembros.FieldByName('cve_rnm').AsString;
                 qryFotos.Active:=true;
                   if not qryFotos.IsEmpty then begin
                     mijpg:=TJPEGImage.Create;
                     mijpg.Assign(qryFotos.FieldByName('foto'));
                     Image1.Picture.Assign(mijpg);
                     //Image1.Picture.Assign(qryFotos.FieldByName('foto'));
                     mijpg.Free;
                   end;
           end;
      end;
 end;
Este codigo me sirve para insertar las imagenes y ahora ya que estan almacenadas en la base de datos me gustaria visualizarlas en una pantalla de delphi, ¿Pero como hago este proceso?, por medio de un DBImage seria sencillo pero solo estoy manejando formato JPG y el DBImage no acepta ese formato. ¿Pueden ayudarme?.

Delfino 28-11-2005 19:28:36

Yo utilizo JvDBImage de la JVCL , para cargar la foto desde un fichero .jpg (u otros):

Código:

dbImg.Picture.LoadFromFile(PictDialog.FileName);
para visualizarla ni siquiera hace falta codigo..

Nelly 28-11-2005 20:44:31

Quizá no me explique correctamente, lo que sucede, quiero visualizar la foto desde otra ventana, en un Grid se en lista una serie de personas y lo que quiero es conforme vaya bajando el foco la imagen cambie de acuerdo al nombre de la persona. Pero no se como hacer eso.

Cita:

Empezado por Delfino
Yo utilizo JvDBImage de la JVCL , para cargar la foto desde un fichero .jpg (u otros):

Código:

dbImg.Picture.LoadFromFile(PictDialog.FileName);
para visualizarla ni siquiera hace falta codigo..


fidel 28-11-2005 23:15:06

Hola:

Si tienes guardada la foto en un campo blob puedes hacer esto:

Pones un TImage (si, TImage), y en un evento adecuado, por ejemplo en OnDateChange del DataSource que alimenta el grid pones este código (adaptado a tu tabla). Cada vez que cambies de línea en el grid aparecerá la foto correspondiente.

Código Delphi [-]
uses
  Windows .... Jpeg, DB;
.....

//mostrar imagen (evento ondatachange de datasource)
procedure TFDatos.DSAlumnosFDataChange(Sender: TObject; Field: TField);
var
  m: TStream;
begin
  if DM.IBDSAlumnosFOTO.IsNull then
    //para registros sin foto poner imagen vacia
    ImageFoto.Picture := nil
  else
    begin
      //si es formato JPG
      ImageFoto.Picture.Graphic:= TJpegImage.Create
      //copiar los datos desde la tabla con un stream
      m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmRead);
      ImageFoto.Picture.Graphic.LoadFromStream(m);
      m.Free;
    end;
end;

Un saludo.

Nelly 29-11-2005 18:04:15

Disculpa, pero ¿DM que viene siendo? Es la unica duda que tengo
Cita:

Empezado por fidel
Código Delphi [-]
if DM.IBDSAlumnosFOTO.IsNull then


vtdeleon 29-11-2005 20:14:38

Cita:

Empezado por Nelly
Disculpa, pero ¿DM que viene siendo? Es la unica duda que tengo

Creo qeu es un DataModulo :o

fidel 30-11-2005 00:29:30

Hola:

Efectivamente, DM es el nombre del DataModule donde tengo el DataSet (IBDSAlumnos).

A propósito, para cargar la foto en el campo blob lo hago también con Streams, el código es mucho más corto que el tuyo, si te interesa te lo pongo.

Un saludo.

rastafarey 01-12-2005 15:50:43

Resp
 
HAber si etso te sirve
Tbdimage


La franja horaria es GMT +2. Ahora son las 02:40:04.

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