Me ajudem no Problema Inclusão de JPG !

20/05/2003

1

Ola pessoal !

Estou com a seguinte duvida e questionamento tenho o seguinte código para incluir uma imagem JPG ou JPEG

[color=blue:23b1424465]
if OpenPictureDialog1.Execute
then
begin
DataModule1.TabIncCad.edit;
DbImage1.Picture.LoadFromFile(OpenPictureDialog1.Filename);
End[/color:23b1424465]

Que todo mundo conhece, e declaro em uses a unit jpeg, não entendo e o porque a o OpenPictureDialog trás de default JPG ou JPEG so serve para visualizar o formato que e carregado no DbImage1 porem quando você grava a informações o conteúdo do DbImage1, isto é , os arquivos JPG ou JPEG não são gravados . Consegui o seguinte código para gravar estes formatos em tabelas paradox

[color=blue:23b1424465]
Procedure Grava_Imagem_JPEG(Tabela:TTable; Campo:TBlobField;
Foto:TImage; Dialog:TOpenPictureDialog);
var BS:TBlobStream;
MinhaImagem:TJPEGImage;
Begin
Dialog.InitialDir := ´c:\temp´;
Dialog.Execute;
if Dialog.FileName <> ´´ Then
Begin
if not (Tabela.State in [dsEdit, dsInsert]) Then
Tabela.Edit;
BS := TBlobStream.Create((Campo as TBlobField), BMWRITE);
MinhaImagem := TJPEGImage.Create;
MinhaImagem.LoadFromFile(Dialog.FileName);
MinhaImagem.SaveToStream(BS);
Foto.Picture.Assign(MinhaImagem);
BS.Free;
MinhaImagem.Free;
Tabela.Post;
DBISaveChanges(Tabela.Handle);
End;
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
Grava_Imagem_JPEG(TbClientes,TbClientesCli_Foto, Image1,
OpenPictureDialog1);
// TbClientes é o nome de alguma Tabela
// TbClientesCli_Foto é um variavel da tabela do tipo Blob
// Image1 é um componente
// OpenPictureDialog1 é o componente para abrir a figura
end;[/color:23b1424465]


e para ler

[color=blue:23b1424465]
Procedure Le_Imagem_JPEG(Campo:TBlobField; Foto:TImage);
var BS:TBlobStream;
MinhaImagem:TJPEGImage;
Begin
if Campo.AsString <> ´´ Then
Begin
BS := TBlobStream.Create((Campo as TBlobField), BMREAD);
MinhaImagem := TJPEGImage.Create;
MinhaImagem.LoadFromStream(BS);
Foto.Picture.Assign(MinhaImagem);
BS.Free;
MinhaImagem.Free;
End
Else Foto.Picture.LoadFromFile(´c:\temp\limpa.jpg´);
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
Le_Imagem_JPEG(TbClientesCli_Foto, Image1);
// TbClientesCli_Foto é um variavel da tabela do tipo Blob
// Image1 é um componente
end;[/color:23b1424465]


e adaptei para minha necessidade da seguinte forma

[color=blue:23b1424465]
procedure TFormIncCad.ActionAdqImgFileExecute(Sender: TObject);
var
BS:TBlobStream;
ImagJPG:TJPEGImage;
begin
{ if OpenPictureDialog1.Execute
then
begin
DataModule1.TabIncCad.edit;
DbImage1.Picture.LoadFromFile(OpenPictureDialog1.Filename);
end }

if OpenPictureDialog1.Execute then
Begin
if OpenPictureDialog1.FileName <> ´´ Then
Begin
DataModule1.TabIncCad.Edit;
BS := TBlobStream.Create((DataModule1.TabIncCadFoto as TBlobField), BMWRITE);
ImagJPG := TJPEGImage.Create;
ImagJPG.loadFromFile(OpenPictureDialog1.FileName);
ImagJPG.SaveToStream(BS);
DbImage1.Picture.Assign(ImagJPG);
BS.Free;
ImagJPG.Free;
//check(DBISaveChanges(DataModule1.TabIncCad.Handle));

End
End

end;[/color:23b1424465]

Estou com dois problemas , um e a respeito do “DBISaveChanges” em que unit se encontra esta função e o outro e que quando seleciono a imagem e clico em abrir recebo a seguinte mensagem EInvalidGraphic with massege “Bitmap image not is valid”. Alguem me ajude resolver ou se tiver uma sugestão eficaz para inclusão e leitura de JPG e JPEG comvisualização apartir de DBImage eu agradeço muito.


Responder

Posts

21/05/2003

Pardal3000

Prezado amigo,

Não sei responder sua pergunta, mas tenho uma dica...

Por que, ao invés de gravar a imagem em uma base de dados, vc não cria uma subpasta com as imagens dentro e grava no db somente o path (caminho para a imagem)? Isso deixará o banco de dados muito mais leve!

Espero ter ajudado,

Pardal3000


Responder