Salvar imagem no banco de dados e exibir no timage

20/02/2020

0

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

Responder

Posts

20/02/2020

Emerson Nascimento

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



Responder

21/02/2020

Emerson Nascimento


Pergunta: qual versão do Delphi você está utilizando?
Responder

21/02/2020

Elpidio Baberge

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
Responder

21/02/2020

Emerson Nascimento

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

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

Responder

21/02/2020

Elpidio Baberge

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
---------------------------
Responder

21/02/2020

Emerson Nascimento

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 );
Responder

21/02/2020

Elpidio Baberge

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
---------------------------

Responder

21/02/2020

Emerson Nascimento

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.
Responder

21/02/2020

Elpidio Baberge

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
Responder

24/02/2020

Florisvaldo

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.
Responder

26/02/2020

Elpidio Baberge

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.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar