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
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
Curtir tópico
+ 0
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?!
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
Clique aqui para fazer login e interagir na Comunidade :)