Salvado Jpeg em um TMemoryStream

01/02/2006

0

Estou tentando salvar uma imagem Jpeg em um TMemoryStream para salvar em um campo Image do SQL Server, porem estou com problemas, acho que quando salvo a imagem do TImage para o TMemoryStream ela não vai e assim quando tento ler dar erro.
Fiz um teste simples que deveria funcionar mais não esta funcionando, segue abaixo o código.
Criei um form com 2 TImage e com 2 Botões, no 1º TImage eu adicionei uma imagem Jpeg qualquer e quando clico no botão 1 ele pega o conteudo do TImage1 e coloca em um TMemoryStream, depois quando eu clico no Botão 2 ele pega o conteúdo do TMemoryStream e coloca no TImage2, porem não funciona, o que estaria errado??

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Jpeg, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Image2: TImage;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
b:TMemoryStream;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Graphic.SaveToStream(b);
ShowMessage(´Imagem transferida do Image1 para o Stream´);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Image2.Picture.Graphic.LoadFromStream(b);
ShowMessage(´Imagem transferida do Stream para o Image2´);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
b:=TMemoryStream.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
b.Destroy;
end;

end.


Dudasm

Dudasm

Responder

Posts

01/02/2006

Glecio

Caro amigo, tenho essa rotina em um velho sistema rodando com IB 6.0.

Tenta assim:



Procedure GravandoNoBD;
Var
   FleStm: TFileStream;
Begin
   If EscolheuImagem Then Begin
      {Grava a Imagem no BD}
      FleStm := TFileStream.Create(NomedoArquivo, fmOpenRead or fmShareDenyWrite);
      DataModule.Query.Sql.Add(´UpDate Tabela Set FieldImage = :FieldImage´);
      DataModule.Query.ParamByName(´FieldImage´).LoadFromStream(FleStm, ftBlob);
      FleStm.Free;
   End Else Begin
      {Apaga a Imagem no BD}
      DataModule.Query.Sql.Add(´UpDate Tabela Set FieldImage = Null´);
   End;
   DataModule.Query.ExecSql;
   DataModule.Query.CommitRetaining;
End;

Procedure PegandoImagemNoBD;
Var
   MemStm: TMemoryStream;
Begin
   If Not DataModule.Query.FieldByName(´FieldImage´).IsNull Then Begin
      MemStm := TMemoryStream.Create;
      DataModule.Query.FieldByName(´FieldImage´).SaveToStream(MemStm);
      Try
         MemStm.Position := 0;
         Image.Picture.Bitmap.LoadFromStream(MemStm);
         Image.Repaint;
      Finally
         MemStm.Free;
      End;
   End;
End;



Qualquer dúvida, estou a disposição . . .


Responder

02/02/2006

Dudasm

Obrigado Glecio, mas desse jeito a imagem é salva em BMP e eu fiz uns testes e fica em média cada imagem com 230kb equanto a JPG fica com 4kb. Mesmo assim obrigado.



Caro amigo, tenho essa rotina em um velho sistema rodando com IB 6.0. Tenta assim:

Procedure GravandoNoBD;
Var
   FleStm: TFileStream;
Begin
   If EscolheuImagem Then Begin
      {Grava a Imagem no BD}
      FleStm := TFileStream.Create(NomedoArquivo, fmOpenRead or fmShareDenyWrite);
      DataModule.Query.Sql.Add(´UpDate Tabela Set FieldImage = :FieldImage´);
      DataModule.Query.ParamByName(´FieldImage´).LoadFromStream(FleStm, ftBlob);
      FleStm.Free;
   End Else Begin
      {Apaga a Imagem no BD}
      DataModule.Query.Sql.Add(´UpDate Tabela Set FieldImage = Null´);
   End;
   DataModule.Query.ExecSql;
   DataModule.Query.CommitRetaining;
End;

Procedure PegandoImagemNoBD;
Var
   MemStm: TMemoryStream;
Begin
   If Not DataModule.Query.FieldByName(´FieldImage´).IsNull Then Begin
      MemStm := TMemoryStream.Create;
      DataModule.Query.FieldByName(´FieldImage´).SaveToStream(MemStm);
      Try
         MemStm.Position := 0;
         Image.Picture.Bitmap.LoadFromStream(MemStm);
         Image.Repaint;
      Finally
         MemStm.Free;
      End;
   End;
End;

Qualquer dúvida, estou a disposição . . .



Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar