Fórum Novamente DBImage com JPEG. Vejam as rotinas. Q Está Errado. #174566

12/08/2003

0

Companheiros, tenho um problema. Qdo vou cadastrar as fotos
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

Paulo

Responder

Post mais votado

13/08/2003

Vou tentar usar o exemplo do marcelo. Só para ter uma idéia, o TImage não carrega dentro de um DBCtrlGrid. Como guardar em um caminho separado e depois visualizá-las todas de uma vez? Assim: Digamos q o imóvel 2006, tem 10 imagens:Banheiro, hall, piscina, suite1, suite2,dep. emp.,garagem,sala, cozi,varanda, então qdo eu abrir o imóvel 2006, deveria vir estas imagens todas na tela(daí eu usar o dbctrlgrid), então o comprador, por exemplo pede para ver melhor o suite1, eu dou dois cliques nele e abre outro form com a imagen ampliada. Só q o imóvel 2007, por exemplo só tem 2 imagens e o 2008 tem 15, esta é minha dificuldades. Uso Paradox. Gostaria de não armazenar nada no banco, mas confesso, tô tomando uma surra, mas vou consegui. Este é meu problema.


Paulo

Paulo
Responder

Gostei + 1

Mais Posts

12/08/2003

4_olho

Este teu campo é Blob?

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?


Responder

Gostei + 0

12/08/2003

Afarias

DBImage não é feito para receber outro formato q não BITMAP (ao q me recordo)

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+


Responder

Gostei + 0

12/08/2003

Perin75

cara gravar imagens no banco e coisa de louco cara dependendo do tamanho da imagem nao grava

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


Responder

Gostei + 0

13/08/2003

Marcelo Saviski

Pega essa Unit >> [url=http://www.camaradabacana.kit.net/Converte_Imagens.pas]Converte_Imagens.pas [/url] 3Kb

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


Responder

Gostei + 0

13/08/2003

E_gama

Baixe os arquivos abaixo, e siga o HOWTO.TXT que acompanha...
Ele habilita o TImage e TDBImage a utilizar imagens JPeg.

[url]http://www.salesiano.com.br/egama/DBJPeg.zip[/url]


Responder

Gostei + 0

13/08/2003

Paulo

e-gama, já baixei este componente da outra vez q vc me falou. talvez eu não esteja me esclarecendo a vc´s. O problema é visualizar de uma única vez, as várias imagens que um determinado arquivo possa ter. Eu só consigo fazê-lo pelo DBCtrlGrid e o DBCtrlGrid não aceita outro formato e eu não conheço outra forma. Esta é minha dificuldade, mostrar na tela de uma única vez todas as imagens. Alguns dizem, para mim gravar só o path, eu não sei fazer isto, mas se soubesse teria como por exemplo, gravar de um único imóvel, tres, quatro ou dez path e na hora de visualizar, vir todos de uma vez? no mesmo form? como num álbum de fotografia? Esta é minha dúvida. Como proceder assim. Como carregar num Stream, como disse o afarias, mas como fazer? Tá feia a coisa por aqui, mas vai clariar, se DEUS quiser. Pedi e dar-se-vos-á, disse Jesus. Então tô pedindo ajuda.


Responder

Gostei + 0

13/08/2003

Allen74

Paulo,

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.


Responder

Gostei + 0

13/08/2003

Marcelo Saviski

Se você colocar bitmaps em vez de JPEGs, só para teste, eles são exibisos no DBCtrlGrid como você quer?
Se for isso, posso te ajudar a converter os JPEGs para bitmap antes de salvar na tabela


Responder

Gostei + 0

13/08/2003

Roger_malk

Paulo:

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.


Responder

Gostei + 0

15/08/2003

Paulo

Instalei o componente do e_gama. O q aconteceu? Foi o seguinte:
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´!!!!!


Responder

Gostei + 0

16/08/2003

Roger_malk

Olá Paulo:

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


Responder

Gostei + 0

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

Aceitar