Salvar imagem no banco de dados e exibir no timage
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?
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
Curtidas 0
Respostas
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
20/02/2020
Pergunta: qual versão do Delphi você está utilizando?
GOSTEI 0
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
20/02/2020
tente:
ou ainda
Image1.Picture.Graphic.Assign( TGraphicField(ClientDataSet1PROFOTO) )
ou ainda
Image1.Picture.Graphic.Assign( ClientDataSet1PROFOTO )
GOSTEI 0
Elpidio Baberge
20/02/2020
tente:
ou ainda
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
---------------------------
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
20/02/2020
acabei de testar aqui e funcionou (com pngimage na uses).
para colocar a imagem no campo:
para exibir a imagem do campo no TImage:
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
20/02/2020
acabei de testar aqui e funcionou (com pngimage na uses).
para colocar a imagem no campo:
para exibir a imagem do campo no TImage:
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
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.
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
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.
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
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?
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
20/02/2020
obrigado pela ajuda pessoal, vou trabalhar com JPG mesmo.
vou levar sua dica em consideração. Obrigado.
Amigo não coloque imagens em banco de dados é melhor salvar em uma pasta
vou levar sua dica em consideração. Obrigado.
GOSTEI 0