Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Visualizar Imagen Formato Jpg En Timage Desde Un Dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=97122)

MARIO2019 12-12-2024 12:53:34

Visualizar Imagen Formato Jpg En Timage Desde Un Dbgrid
 
Buenos dias, tengo un proyecto donde he cargado la foto con formato jpg en una tabla (Campo foto (blob)) de estudiante. En un DBGRID tengo los datos de los estudiantes. Lo que necesito es que al posicionarme en una fia del DBGRID se visualice la foto del estudiante en un TIMAGE.

Antes no tenia problema al cargar imagenes con formato BMP, pero al cargar imagen con otro formato (JPG), DBIMAGE me quedo obsoleto

Este es el BOTON que carga la foto.

Código Delphi [-]
procedure TfALtaestudianbte.BitBtn1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    fmodulo.testudiante.Edit;
    Image2.picture.loadfromfile(OpenDialog1.FileName);
    fmodulo.testudiante.FieldByName('f').Assign(Image2.Picture.Graphic);
  end;
Desde ya muy agradecido


Nota del moderador: Por favor, añadid TAGs cuando pongáis código, trozos de XML,... y en tu caso ya que eres nuevo, bienvenido y te recomiendo revidsar la guía de estilo de los foros.

Casimiro Notevi 12-12-2024 13:27:46

Si es una versión muy antigua de delphi entonces tendrás que añadir jpeg al uses.
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  BlobStream: TStream;
  JpegImage: TJpegImage;
begin
  if Column.FieldName = 'ImageField' then
  begin
    JpegImage := TJpegImage.Create;
    try
      BlobStream := DBGrid1.DataSource.DataSet.CreateBlobStream(Column.Field, bmRead);
      try
        JpegImage.LoadFromStream(BlobStream);
        DBGrid1.Canvas.StretchDraw(Rect, JpegImage);
      finally
        BlobStream.Free;
      end;
    finally
      JpegImage.Free;
    end;
  end
  else
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

MARIO2019 12-12-2024 14:34:22

Gracias Casimiro, estoy utilizando Delphi xv, ya le agregué al uses. Al ejecutarlo me salta un error en bm Read

cloayza 12-12-2024 14:48:27

Estimado colega, hace ya un tiempo, realice cambios a componente DBImage para permitir otros formatos de imagenes a desplegar...

En el siguiente enlace CLDBImagen lo puede descargar. Está el código del componente un ejemplo de su uso (Con tablas Paradox :()...Yo lo utilizo con Firebird y sin ningún problema :D...

Espero le sirva, saludos cordiales

Neftali [Germán.Estévez] 12-12-2024 15:39:19

Cita:

Empezado por MARIO2019 (Mensaje 560689)
Buenos dias, tengo un proyecto donde he cargado la foto con formato jpg en una tabla (Campo foto (blob)) de estudiante. En un DBGRID tengo los datos de los estudiantes. Lo que necesito es que al posicionarme en una fia del DBGRID se visualice la foto del estudiante en un TIMAGE.

Antes no tenia problema al cargar imagenes con formato BMP, pero al cargar imagen con otro formato (JPG), DBIMAGE me quedo obsoleto

Te adjunto un procedimiento que te permite cargar en un TImage, una imagen almacenada en un campo de una base de datos (ya sea BMP o JPG).
Necesitas pasarle el campo de Tipo BLOB, la extensión y el TImage donde quieres que te la dibuje.
Es de los ejemplos que puedes encontrar en el FTP del Club.

Código Delphi [-]
procedure MostrarCampoJPGImage(FieldImagen:TBlobField; ext:string; Picture:TPicture);
var
  Stream: TMemoryStream;
  Jpg: TGraphic;
begin
  Jpg := nil;
  Stream := nil;
  try
    Stream := TMemoryStream.Create;
    FieldImagen.SaveToStream(Stream);
    if Stream.Size > 0
     then begin
          if AnsiUpperCase(ext)='.BMP' then
           Jpg := TBitmap.create
          else
           Jpg := TJpegImage.Create;

           Stream.Position := 0;
           Jpg.LoadFromStream(Stream);
           Picture.Assign(Jpg);
         end
     else Picture.Assign(nil);
  except
    Picture.Assign(nil);
  end;
  jpg.Free;
  Stream.Free;
end;


Para llamarlo puedes hacer de una de estas formas:

Código Delphi [-]
  // para una imagen JPG
  MostrarCampoJPGImage(Table1Imagen, '.jpg', Image2.Picture);
  // para un BMP
  MostrarCampoJPGImage(Table1Imagen, '.bmp', Image2.Picture);


Table1Imagen es el campo de tipo blob de tu tabla

MARIO2019 12-12-2024 21:55:29

Problema con bmRead - Debo declarar la clase TBlobStream
 
Al ejecutar el programa, me sale un error BMREAD. Donde debo declarar el Objeto de esta clase

Código SQL [-]
Constructor Create(Field: TBlobField; Mode: TBlobStreamMode)
Donde lo declaro, en el form

cloayza 12-12-2024 22:10:45

Debes incluir la unidad Data.DB.

Saludos cordiales

MARIO2019 12-12-2024 23:26:58

EROOR E2003 Undeclared identifier: 'bmRead'
 
Sigoejecutando y me sale este error
Código Delphi [-]
 BlobStream := DBGrid1.DataSource.DataSet.CreateBlobStream(Column.Field, bmRead);
Código Delphi [-]
 E2003 Undeclared identifier: 'bmRead'

Me podrian ayudar donde declarar TBlobStreamMode

MARIO2019 13-12-2024 12:31:17

Solucion E2003 Undeclared identifier: 'bmRead'
 
En el USES DEL FORM lo instale a DB, Solucionado. Voy a tratar de subir la imagen y comento. Gracias a todos


La franja horaria es GMT +2. Ahora son las 22:09:28.

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