Fórum Novamente DBImage com JPEG. Vejam as rotinas. Q Está Errado. #174566
12/08/2003
0
em formato JPG, dentro de um DBImage, eu consigo carregar
e vê-las. Eis abaixo os códigos para cadastrar: Com este código eu consigo gravar.
procedure TfrmCadFotos.FlatButton4Click(Sender: TObject);
var
img: TJPEGImage;
begin
img:= TJPEGImage.Create;
Dm.Foto.Insert;
OpenPictureDialog1.Execute;
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
img.DIBNeeded;
clipboard.assign(img);
dbimage1.pastefromclipboard;
img.free;
end;
Só q. qdo eu vou visualizá-las dentro de um DBCtrlGrid, com um DBImage por cima as fotos não aparecem. Ex: Se eu tenho 3 fotos para um imóvel, aparecem 3 dbimage em branco, se tenho 4 aparecem 4 dbimage em branco, sem q se consiga ver as fotos. Tô desesperado! Se puderem me ajudar, eu agradeço!
Paulo
Curtir tópico
+ 0Post mais votado
13/08/2003
Paulo
Gostei + 1
Mais Posts
12/08/2003
4_olho
Parece que você está só conseguindo criar o registro, mas este continua vazio.
Que tipo de banco de dados está usando?
Não seria mais fácil guardar só o caminho para acessar a imagem e esta ficaria em uma pasta separada?
Gostei + 0
12/08/2003
Afarias
Para trabalhar com JPGs armazenados em banco de dados, carregue os dados do campo BLOB em um Stream e jogue manualmente em um componente TImage
T+
Gostei + 0
12/08/2003
Perin75
1 tem banco que voce se a imagem for maior que 60 k voce tem que mexar em um monte de rotinas do banco agora se voce tiver usando paradox ate vai ....
Gostei + 0
13/08/2003
Marcelo Saviski
no local aonde você carrega a imagem no DBImage, tipo botão abrir, não sei como você usa ai, coloca esse código abaixo;
declare Converte_Imagens no uses
var BMP : TPicture; begin BMP := TPicture.Create; try if OpenPictureDialog.Execute then begin Screen.Cursor := crHourGlass; BMP.LoadFromFile(OpenPictureDialog.FileName); if (ExtractFileExt(OpenPictureDialog.FileName) = ´.jpeg´) or (ExtractFileExt(OpenPictureDialog.FileName) = ´.jpg´) then BMP := JpgToBmp(OpenPictureDialog.FileName); if (ExtractFileExt(OpenPictureDialog.FileName) = ´.gif´) then BMP := GifToBmp(OpenPictureDialog.FileName); qryTrabalho.FieldByName(´Campo da Imagem´).Assign(BMP); TImage(Sender).Picture.Assign(BMP);// exibe a imgem em um TImage comum end; finally BMP.Free; Screen.Cursor := crDefault; end;
Tem uns esquemas para abrir gif ai também, mas você presisa ter a RXLib instalada no seu Delphi, se não tiver, vai dar uns erros, mas pode deletar tudo que tiver alguma coisa que tiver a ver com .gif
Gostei + 0
13/08/2003
E_gama
Ele habilita o TImage e TDBImage a utilizar imagens JPeg.
[url]http://www.salesiano.com.br/egama/DBJPeg.zip[/url]
Gostei + 0
13/08/2003
Paulo
Gostei + 0
13/08/2003
Allen74
Para ser possível te orientar para uma solução adequada, percebo que estão faltando alguns detalhes importantes. Não sei se você já os colocou em outro tópico, mas vou perguntar assim mesmo:
Pelo que entendi, sua verdadeira intenção é carregar todas as imagens relacionadas a um determinado imóvel e apresentá-las todas em um formulário. Até este ponto, tudo bem, mas de que forma serão visualizadas estas imagens?
Você pretende apresentar todas de forma reduzida em um thumbnail e com o clique do mouse na imagem reduzida mostrará em tamanho real? Ou então você apresentará um painel com a imagem em tamanho real e fornecerá um dispositivo de navegação para selecionar a próxima foto ou escolher a partir da descrição do ambiente fotografado?
Tente ser bem claro nestas definições e também forneça alguns detalhes de como você organizou o banco de dados para receber estas imagens.
Como você está falando que o controlgrid com os componentes que permitem a visualização de JPeg pelo banco de dados não te atendeu, imagino que você pretenda fazer algo no estilo de thumbnails. Por enquanto não está muito claro a dificuldade que você está enfrentando.
Gostei + 0
13/08/2003
Marcelo Saviski
Se for isso, posso te ajudar a converter os JPEGs para bitmap antes de salvar na tabela
Gostei + 0
13/08/2003
Roger_malk
O que o Allen falou faz sentido, tá estranho acompanhar suas necessidades.
suas fotos estao em uma tabela separada refrenciando o imovel ?
to numa máquina sem o delphi e nao pude testar, mas o componente do e-gama resolveria seu problema se fosse uma única imagem ?
Se sim, então incua um container, com um loop para criar o componente em run-time para cada foto.
Sinto não poder ajudar mais por hora, mas se até de noite ninguém der uma solução eu monto um exemplo e te passo aqui na lista mesmo.
espero ter ajudado.
roger_malk.
Gostei + 0
15/08/2003
Paulo
Eu consigo cadastrar as foto, mas na hora de mostrar dentro do DBCtrlgrid, as JPG´s não vem, só as BMP´s. Meu projeto está assim:
tenho duas tabelas uma de Imovel e outra de Foto. Cadastro as fotos obedecendo um critério q é a Ref. do imóvel. A Ref. não é igual, cada imóvel tem uma. Tenho no form cadastro dois botões, um dbimage e OpenPictureDialog. No 1º botão(abrir) eu executo o OpenPicture, seleciono a imagem com FileName e dou um Insert na tabela de Fotos. Ao abrir a foto, tem tres componentes q são:DBlookupcomboBox, DBEdit e um edit. No DBLookup, eu seleciono o imóvel, q carrega a Ref. no edit. No DBEdit, ligado ao campo nome da tabela de foto, eu coloco o nome da foto q já está ligado ao Imovel pela Ref. No outro botão o comando é:
Dm.Foto.Post; No AfterPost da Tabela está:
DBIsaveChanges((dataset as tquery).handle) com a unit dbiprocs declarada na seção uses. Bem isto é mais ou menos o meu projeto.
No outro form está assim:
Um dbCtrlGrid, um DBImage, 4 speedbutton, um DBLookup e um BitBtn. Os Speed´s são criar e deletar coluna e criar e deletar linhas no DBCtrlGrid. O DBLookup está os imóveis e no BitBtn, um comando sql para selecionar o imóvel, cujo parâmetro está no DBLookup. Funciona mas só com as imagens BMP´s. Para tirar dúvidas, eu gravei para o mesmo imóvel 8 fotos. 4 BMP´s e 4 JPG´s. Qdo puxo as imagens, vem 8 DBImage gerado pelo DBCtrlGrid, só q 4 mostram as imagens(BMP´s) e os outros 4 vêm em branco. Se fossem 3 JPG´s. viriam tres DBImage, mas em branco. Só q tem um porem, qdo vou cadastrar as JPG´s, num DBImage(sem o DBCtrlGrid) eu as vejo, então vem a pergunta. Como posso fazer ligar as imagens fora do BD a um determinado campo no BD(imovel), pois é o q acontece qdo vou gravar. Antes do post, eu as vejo, mas depois q dou o post, ela some, como se eu desse um insert, mas não dou. Creio q o problema está aí, ela não visualiza imagens em BD(creio eu), posantes de gravar elas aparecem e depois some. Tá ´brabo´!!!!!
Gostei + 0
16/08/2003
Roger_malk
VC esta usando aquela rotina q passou no inico do tópico ?:
procedure TfrmCadFotos.FlatButton4Click(Sender: TObject); var img: TJPEGImage; begin img:= TJPEGImage.Create; // tá legal, criou o jpg Dm.Foto.Insert; // abriu a table para inserção OpenPictureDialog1.Execute; // dialogo para achar a foto DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName); img.DIBNeeded; // inseriu direto na table sem tratar e clipboard.assign(img); // disse pro jpg descompactar a dbimage1.pastefromclipboard; // imagem ??? e passou ela pro clipb img.free; // e depois colou ela na tabela ??? end;
nao seria talvez
img.loadfromfile(OpenPictureDialog1.FileName)
Desculpa, mais acho q me perdi no seu codigo. Foi só uma pergunta.
roger_malk
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)