GARANTIR DESCONTO

Fórum Gravação TImage JPEG do ClipBoard #346926

02/10/2007

0

Prezados Amigos..
Vejam se podem me ajudar....

Tenho uma rotina que chamo para gravar a foto do cliente (jpeg) de um TImage que está funcionando perfeitamente no caso da foto estar gravada fisicamente no HD. Neste caso o usuario localiza o arquivo salvo como jpeg e adiciona o mesmo no TImage.

Vejam a rotina que faz esse processo:

[i:ccf29f44b3](Onde passo o caminho do arquivo (jpeg) através do parametro ´Filename´ do componente TImage e o parametro ´Campo´ que é o campo da tabela no firebird que armazena a foto [/i:ccf29f44b3]

Procedure Grava_Imagem_JPEG(FileName: String; Campo: TBlobField);
Var
stImagem : TFileStream;
begin
stImagem := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite );
Try
Campo.LoadFromStream(stImagem);
Finally
stImagem.Free;
End;
end;


O que ocorre é que agora utilizamos um sistema de recorte da foto direto da webcam, onde a mesma fica no ClipBoard(area de trasnferencia), então precisei criar um botão para descarregar essa foto da memoria. O comando do click do botão é o seguinte:

imgFoto.Picture.Assign(Clipboard);


Neste caso a foto é descarregada para o TImage tranquilamente, mas o processo de gravação através da procedure citada, se utiliza do ´Filename´ do TImage que guarda o caminho fisico do arquivo. Neste caso a imagem não tem um caminho fisico haja visto que é descarregada da memoria..
Então gostaria de saber o que colocar no lugar em substituição de:

stImagem := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite );

uma vez que essa linha cria o stream baseado no arquivo fisico.. e preciso que o stream seja criado baseado no conteudo do componente tImage...

Outro detalhe é que esta imagem quando é passada via arquivo fisico tenho como garantir a extensão dela como jpeg, pois o usuario localiza-a através de um opendialog. Como faço para nesta mesma procedure... converter o conteudo do TImage para jpeg.. antes de passa-lo para o stream que guardará a imagem:

já tentei de tudo.. será que seria algo como:

stImagem := TClipBoardStream.Create(TImage.Picture );

Acho que seria algo deste tipo...


Se puderem me ajudar.. conto com vcs...
Um grande abraço

Pablo - Marilia/SP


Pablo_lima

Pablo_lima

Responder

Posts

02/10/2007

Mayron Cachina

se ninguem te responder até amanha a noite eu tenho a solução para seus problemas...
hehehe

a rotina ta lá em casa e eu so vou amanha a noite...
bem ela faz justamente oq vc quer :D eu te passo o codigo completo blz?!


Responder

Gostei + 0

03/10/2007

Mayron Cachina

esse é o código inteiro do meu projeto, ele pega a imagem de uma webcam e salva como BMP (tb tem pra salvar como jpg),estou usando o componente Videocap.

unit UTiraFoto;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Videocap, JPEG, Clipbrd, ExtCtrls;

type
  TfrmTiraFoto = class(TForm)
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    Panel1: TPanel;
    SpeedButton3: TSpeedButton;
    VideoCap1: TVideoCap;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure SpeedButton3Click(Sender: TObject);
  private
    { Private declarations }
  public
    fAluno : boolean;
    { Public declarations }
  end;

var
  frmTiraFoto: TfrmTiraFoto;


implementation

uses Unit1;

{$R *.dfm}

procedure TfrmTiraFoto.SpeedButton1Click(Sender: TObject);
begin
  VideoCap1.VideoPreview := false;
  SpeedButton3.Visible := true;
end;

procedure TfrmTiraFoto.SpeedButton2Click(Sender: TObject);
begin
  VideoCap1.VideoPreview := true;
  SpeedButton3.Visible := false;
end;

procedure TfrmTiraFoto.FormShow(Sender: TObject);
begin
  VideoCap1.DriverOpen := true;
  VideoCap1.VideoPreview := true;
end;

procedure TfrmTiraFoto.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  VideoCap1.VideoPreview := false;
  VideoCap1.DriverOpen := false;
end;

procedure TfrmTiraFoto.SpeedButton3Click(Sender: TObject);
Var BMP : TBitMap;
//    JPG : TJpegImage;
begin
  VideoCap1.SaveToClipboard;
  BMP := TBitMap.Create;
  BMP.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
//  JPG := TJpegImage.Create;
//  JPG.Assign(BMP);

if fAluno = true then
begin
  // Recebe o Número da Matrícula Aluno
  BMP.SaveToFile(ExtractFileDir(Application.ExeName)+´\img\´+ frmCadAluno.edMatricula.Text +´.bmp´);
//  JPG.Free;
  BMP.Free;
  frmCadAluno.Image2.Picture.LoadFromFile(ExtractFileDir(Application.ExeName)+´\img\´+ frmCadAluno.edMatricula.Text +´.bmp´);
  Close;
end
else
  begin// Recebe o Número da Matrícula Funcionario
  BMP.SaveToFile(ExtractFileDir(Application.ExeName)+´\img\F´+ frmCadAluno.edtMatricula_func.Text +´.bmp´);
//  JPG.Free;
  BMP.Free;
  frmCadAluno.Image6.Picture.LoadFromFile(ExtractFileDir(Application.ExeName)+´\img\F´+ frmCadAluno.edtMatricula_func.Text +´.bmp´);
  Close;
  end;

end;

end.



Responder

Gostei + 0

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

Aceitar