jpeg dica que funcione?

Delphi

28/10/2004

notei que no clube tem muitas dicas sobre ler jpeg!!!
mas até o momento nenhuma funcionou corretamente testei muitas ...

por favor alguém saberia como posso armazenar imagens *.jpg em meu banco e depois poder visualizar sem maiores problemas


Crcam

Crcam

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

28/10/2004

Para armazenar JPEG você precisa usar os métodos LoadFromStream e SaveToStream já que a maioria dos banco de dados não aceita armazenar esse formato diretamente como um arquivo BMP.


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

28/10/2004

Colega,

Qual a versão do Delphi e qual banco de dados está utilizando? Você pode colocar o código da(s) rotina(s) testada(s) para análise?


GOSTEI 0
Christian_adriano

Christian_adriano

28/10/2004

Algumas funções para trabalhar com Jpeg (jpg) e Bmp:

{ Converte de BMP para JPEG - JPG }
function QualquerCoisaToJPEG(iGraphic: TGraphic): TJPEGImage;
begin
Result := TJPEGImage.Create;
Result.Assign(iGraphic);
end;

{ Converte de BMP para JPEG }
procedure Bmp_Jpeg(const BmpFileName, JpgFileName: string);
var
Bmp: TBitmap;
Jpg: TJPEGImage;
begin
Bmp := TBitmap.Create;
Jpg := TJPEGImage.Create;
try
Bmp.LoadFromFile(BmpFileName);
Jpg.Assign(Bmp);
Jpg.SaveToFile(JpgFileName);
finally
Jpg.Free;
Bmp.Free;
end;
end;
------------------------------------------------------------------------------
{ Carrega para o BD uma Imagem JPEG - JPG }
procedure CarregaFotoParaBancoJPEG(CampoImagem, FileName : String; DataSet : TDataSet);
var
FS: TFileStream;
BS: TStream;
begin

if Trim(FileName) <> ´´ then
begin
FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
BS := DataSet.CreateBlobStream(DataSet.FieldByName(CampoImagem), bmWrite);
try
BS.CopyFrom(FS, FS.Size);
finally
FS.Free;
BS.Free;
end;
end;

end;
------------------------------------------------------------------------------
{ Descarrega do BD uma Imagem JPEG - JPG }
procedure CarregarDoBancoJPEG(CampoImagem : String; DataSet : TDataSet; Img : TImage);
var
BS: TStream;
Img_: TJPEGImage;
begin

if not DataSet.FieldByName(CampoImagem).IsNull then
begin
BS := DataSet.CreateBlobStream(DataSet.FieldByName(CampoImagem), bmRead);
Img_ := TJPEGImage.Create;
try
Img_.LoadFromStream(BS);
Img.Picture.Assign(Img_);
finally
BS.Free;
Img_.Free;
end;
end
else Img.Picture:= nil;

end;
------------------------------------------------------------------------------
{ Carrega para o BD uma Image BMP }
procedure CarregaFotoParaBanco(CampoImagem : String; Img : TImage; CDS : TDataSet);
var
Stm: TStream;
JPEG : TJPEGImage;
begin

if not (CDS.State in [dsInsert, dsEdit]) then
Exit;

try

Stm := TMemoryStream.Create;
if Img.Picture.Graphic = nil then
Exit;

{ Converte uma Imagem BMP para JPEG - JPG }
JPEG := TJPEGImage.Create;
JPEG := QualquerCoisaToJPEG(Img.Picture.Graphic);
JPEG.Compress;

{ Guarda a Imagem convertida no Banco de Dados }
Img.Picture.Graphic := JPEG;
Img.Picture.Graphic.SaveToStream(Stm);
Stm.Position := 0;
if CDS.State in [dsInsert, dsEdit] then
(CDS.FieldByName(CampoImagem) as TBlobField).LoadFromStream(Stm);

finally
Stm.Free;
JPEG.Free;
end;

end;
------------------------------------------------------------------------------
procedure CarregaFotoDoBanco(CampoImagem : String; CDS : TDataSet; ImgDestino : TImage);
var
Stm: TStream;
begin
Stm := TMemoryStream.Create;
try
with CDS do begin
if TBlobField(FieldByName(CampoImagem)).BlobSize > 0 then
begin
TBlobField(FieldByName(CampoImagem)).SaveToStream(Stm);
Stm.Position := 0;
ImgDestino.Picture.Bitmap.LoadFromStream(Stm);
end
else
ImgDestino.Picture.Assign(nil);
end;
finally
Stm.Free;
end;
end;
------------------------------------------------------------------------------
uses QRCtrls, DB, DBTables, JPEG

Espero ajudar muita gente.

[]´s.

Christian.


GOSTEI 0
POSTAR