Novamente DBImage com JPEG. Vejam as rotinas. Q Está Errado.

Delphi

12/08/2003

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

Curtidas 0

Melhor post

Paulo

Paulo

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.


GOSTEI 1

Mais Respostas

4_olho

4_olho

12/08/2003

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?


GOSTEI 0
Afarias

Afarias

12/08/2003

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+


GOSTEI 0
Perin75

Perin75

12/08/2003

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


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

12/08/2003

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


GOSTEI 0
E_gama

E_gama

12/08/2003

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]


GOSTEI 0
Paulo

Paulo

12/08/2003

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.


GOSTEI 0
Allen74

Allen74

12/08/2003

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.


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

12/08/2003

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


GOSTEI 0
Roger_malk

Roger_malk

12/08/2003

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.


GOSTEI 0
Paulo

Paulo

12/08/2003

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


GOSTEI 0
Roger_malk

Roger_malk

12/08/2003

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


GOSTEI 0
POSTAR