Salvar imagem no banco de dados e exibir no timage

Delphi

20/02/2020

Boa tarde galera.

Tenho um projeto onde o usuário pode salvar as imagens de seus produtos, estou salvando as imagens no banco de dados.
Como faço para exibir estas imagens no TImage ou outro componente do delphi?

Eu já pesquisei em alguns fórum e imagem do tipo PNG não exibe.

Alguém poderia ajudar?
Elpidio Baberge

Elpidio Baberge

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

20/02/2020

adicione PNGImage (Vcl.Imaging.pngimage) à cláusula uses e o TImage passará a trabalhar com imagens PNG.



GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/02/2020


Pergunta: qual versão do Delphi você está utilizando?
GOSTEI 0
Elpidio Baberge

Elpidio Baberge

20/02/2020

adicione PNGImage (Vcl.Imaging.pngimage) à cláusula uses e o TImage passará a trabalhar com imagens PNG.





Bom dia Emerson, conforme me orientou eu coloquei a PNGImage nas uses, porém não funcionou.

Este é o meu Código
   ClientDataSet1.Open;

  Image1.Picture.Assign( TGraphicField(ClientDataSet1PROFOTO) );


Retorna o seguinte erro.

"Bitmap image is not valid."

Estou utilizando o Delphi XE10 Seattle
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/02/2020

tente:
Image1.Picture.Graphic.Assign( TGraphicField(ClientDataSet1PROFOTO) )

ou ainda
Image1.Picture.Graphic.Assign( ClientDataSet1PROFOTO )

GOSTEI 0
Elpidio Baberge

Elpidio Baberge

20/02/2020

tente:
Image1.Picture.Graphic.Assign( TGraphicField(ClientDataSet1PROFOTO) )

ou ainda
Image1.Picture.Graphic.Assign( ClientDataSet1PROFOTO )



Testei as duas forma, me retorna Access Violation

---------------------------
Debugger Exception Notification
---------------------------
Project Project2.exe raised exception class $C0000005 with message 'access violation at 0x0079a439: read of address 0x00000000'.
---------------------------
Break Continue Help
---------------------------
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/02/2020

acabei de testar aqui e funcionou (com pngimage na uses).

para colocar a imagem no campo:
ClientDataSet1F001_IMAGEM.Assign( Image1.Picture.Graphic );

para exibir a imagem do campo no TImage:
Image2.Picture.Assign( ClientDataSet1F001_IMAGEM );
GOSTEI 0
Elpidio Baberge

Elpidio Baberge

20/02/2020

acabei de testar aqui e funcionou (com pngimage na uses).

para colocar a imagem no campo:
ClientDataSet1F001_IMAGEM.Assign( Image1.Picture.Graphic );

para exibir a imagem do campo no TImage:
Image2.Picture.Assign( ClientDataSet1F001_IMAGEM );


Desculpa minha falta de conhecimento mas olha só minha unit.

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DBXFirebird, Data.DB, Data.SqlExpr,
  Data.FMTBcd, Vcl.StdCtrls, Vcl.ExtCtrls, Datasnap.Provider, Datasnap.DBClient, PNGImage;

type
  TForm1 = class(TForm)
    SQLConnection1: TSQLConnection;
    SQLQuery1: TSQLQuery;
    DataSource1: TDataSource;
    ClientDataSet1: TClientDataSet;
    DataSetProvider1: TDataSetProvider;
    SQLQuery1PROCODIGO: TIntegerField;
    SQLQuery1PROFOTO: TBlobField;
    Image1: TImage;
    Button1: TButton;
    ClientDataSet1PROCODIGO: TIntegerField;
    ClientDataSet1PROFOTO: TBlobField;
    Image2: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientDataSet1.Open;

  ClientDataSet1.append;

  ClientDataSet1PROCODIGO.AsInteger := 1;
  ClientDataSet1PROFOTO.Assign( Image1.Picture.Graphic );
  ClientDataSet1.Post;

  Image2.Picture.Assign( ClientDataSet1PROFOTO );



end;

end.



nessa linha ak
Image2.Picture.Assign( ClientDataSet1PROFOTO );

da o erro


---------------------------
Project2
---------------------------
Bitmap image is not valid.
---------------------------
OK
---------------------------

GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/02/2020

Qual o banco de dados utilizado? Qual o tipo do campo?

Testei com Firebird 3.0, campo BLOB subtype 0 (Binary)

segue exemplo:
https://www.4shared.com/rar/fiStRyR-ea/Project7_Binarios.html
https://www.4shared.com/rar/IYWH19oriq/Project7_Fontes.html

para testar, extraia o conteúdo de Project7_Binarios numa pasta qualquer.

você pode incluir um novo registro ou pode alterar um registro existente.
para alterar a imagem de um registro existente, deixe-o em modo de edição (altere o conteúdo de algum campo)
para selecionar a imagem, dê um duplo-clique no objeto imagem.
após selecionar a imagem, clique no botão 'TRANSFERIR IMAGEM PARA O CAMPO'. Quando tudo estiver pronto, clique no botão 'SALVAR REGISTRO NO BANCO DE DADOS'.
se você navegar entre os registros, verá que a imagem é carregada automaticamente. há imagens PNG, JPEG e BMP.
você poderá selecionar qualquer um dos três tipos de imagem.

OBS.: O executável exemplo só funciona se você tiver o Firebird 3.0 instalado e rodando.
GOSTEI 0
Elpidio Baberge

Elpidio Baberge

20/02/2020

Qual o banco de dados utilizado? Qual o tipo do campo?

Testei com Firebird 3.0, campo BLOB subtype 0 (Binary)

segue exemplo:
https://www.4shared.com/rar/fiStRyR-ea/Project7_Binarios.html
https://www.4shared.com/rar/IYWH19oriq/Project7_Fontes.html

para testar, extraia o conteúdo de Project7_Binarios numa pasta qualquer.

você pode incluir um novo registro ou pode alterar um registro existente.
para alterar a imagem de um registro existente, deixe-o em modo de edição (altere o conteúdo de algum campo)
para selecionar a imagem, dê um duplo-clique no objeto imagem.
após selecionar a imagem, clique no botão 'TRANSFERIR IMAGEM PARA O CAMPO'. Quando tudo estiver pronto, clique no botão 'SALVAR REGISTRO NO BANCO DE DADOS'.
se você navegar entre os registros, verá que a imagem é carregada automaticamente. há imagens PNG, JPEG e BMP.
você poderá selecionar qualquer um dos três tipos de imagem.

OBS.: O executável exemplo só funciona se você tiver o Firebird 3.0 instalado e rodando.


Obrigado pela ajuda, vou seguir suas orientações e dou um retorno.

Banco Firebird 2.5
Campo BLOB SUB_TYPE 0
GOSTEI 0
Florisvaldo

Florisvaldo

20/02/2020

Boa tarde galera.

Tenho um projeto onde o usuário pode salvar as imagens de seus produtos, estou salvando as imagens no banco de dados.
Como faço para exibir estas imagens no TImage ou outro componente do delphi?

Eu já pesquisei em alguns fórum e imagem do tipo PNG não exibe.

Alguém poderia ajudar?


Amigo não coloque imagens em banco de dados é melhor salvar em uma pasta.
GOSTEI 0
Elpidio Baberge

Elpidio Baberge

20/02/2020

obrigado pela ajuda pessoal, vou trabalhar com JPG mesmo.

Amigo não coloque imagens em banco de dados é melhor salvar em uma pasta


vou levar sua dica em consideração. Obrigado.
GOSTEI 0
POSTAR