Fórum Capturar img do Desktop e salvar como jpeg. #237011
09/06/2004
0
alguém sabe como posso resolver esse problema
pois nem sei iniciar o codigo.
[color=red:9a5dde69b2]Título alterado pelo Moderador oTTo. Antes: ´desktop´[/color:9a5dde69b2]
Crcam
Curtir tópico
+ 0Posts
09/06/2004
Fabio.hc
uses DateUtils, JPEG; procedure TForm1.Button1Click(Sender: TObject); var nomeArq:string; ano, mes, dia, hor, min, seg, Mseg:word; begin try Image1.picture.Assign(CaptureScreenRect(Rect(0,0,Screen.Width,Screen.Height))); DecodeDateTime(Now,ano,mes,dia,hor,min,seg,mseg); nomeArq := IntToStr(ano)+FormatFloat(´00´,mes)+IntToStr(dia)+´-´+IntToStr(hor)+IntToStr(min)+IntToStr(seg); nomeArq := ´C:\Teste\´+nomeArq; BmpToJpg(image1.picture.Bitmap, nomeArq); except end; end; function CaptureScreenRect( ARect: TRect ): TBitmap; var ScreenDC: HDC; begin Result := TBitmap.Create; with Result, ARect do begin Width := Right - Left; Height := Bottom - Top; ScreenDC := GetDC( 0 ); try BitBlt( Canvas.Handle, 0, 0, Width, Height, ScreenDC, Left, Top, SRCCOPY ); finally ReleaseDC( 0, ScreenDC ); end; end; end; function BmpToJpg(cImage: tbitmap; nomeJpg:string): Boolean; var jp: TJpegImage; begin jp := TJpegImage.Create; try with jp do begin Assign(cImage); SaveToFile(nomeJpg+´.jpg´) end; finally jp.Free; end; end;
Esta função captura o dektop e salva em jpg com o nome (ano+dia+mes+hora+minuto+segundo).
ex: 2004069-20457.jpg
Gostei + 0
03/07/2006
Zlink
deu blz, salva no intervalo desenjado, só após salvar umas 30 / 40 imagens, dá o seguinte erro:
Projec Project1.exe raised exception classs EOutOfResouces with message
´Espaço insuficiente de armazenamento para processar este comando.´
Projet stopped. Use step or Run to continue.
Na linha SaveToFile(nomeJpg+´.jpg´)
Só se for problema de armazenamento na memória, pois o disco está livre.
Alguém pode dar uma dica de como resolver o problema ?
Gostei + 0
03/07/2006
Jlimajr
function CapturaTelaJpg: TJpegImage; var dc : hdc; cv : TCanvas; aux : TBitmap; begin Result := TJPEGImage.Create; aux := TBitmap.Create; aux.Height := Screen.Height; aux.Width := Screen.Width; dc := GetDC(0); cv := TCanvas.Create; cv.Handle := dc; //--Define o tamanho da imagem aux.Canvas.CopyRect(Rect(0,0,Screen.Width,Screen.Height),cv, Rect(0,0,Screen.Width,Screen.Height)); cv.Free; ReleaseDC(0,dc); //-- Compacta o BMP para JPEG Result.Assign(aux); Result.Compress; end; Use um timer procedure TForm1.Timer1Timer(Sender: TObject); var s : string; begin S := ´F´+FormatDateTime(´yymmdd.hhnn´,now)+´.jpg´; CapturaTelaJpg.SaveToFile(´C:\pastadeimagens\fotostela\´+S); end;
Gostei + 0
03/07/2006
Zlink
O tempo (interval) é a cada 10000 (10 segundos)
alterei o código para o nome do arquivo não ser substituido com a imagem
S := ´F´+FormatDateTime(´yymmdd.hhnn´,now)+´.jpg´;
S := ´F´+FormatDateTime(´yymmdd.hhnnss´,now)+´.jpg´;
Mais nada demais, e continua o mesmo erro.
Agora apresenta na linha
Result.Compress;
Gostei + 0
03/07/2006
Zlink
var nomeArq:string;
ano, mes, dia, hor, min, seg, Mseg:word;
begin
try
Image1.picture.Assign(CaptureScreenRect(Rect(7,4,Screen.Width,Screen.Height)));
DecodeDateTime(Now,ano,mes,dia,hor,min,seg,mseg);
nomeArq := IntToStr(ano)+FormatFloat(´00´,mes)+IntToStr(dia)+´-´+IntToStr(hor)+IntToStr(min)+IntToStr(seg);
nomeArq := ExtractFilePath(Application.ExeName) +nomeArq;
Image1.picture.SaveToFile(nomeArq+´.bmp´);
//BmpToJpg(image1.picture.Bitmap, nomeArq);
except
Image1.free;
end;
end;
Sem transformar em jpeg, salvar como bmp, mais continua dando o mesmo erro, agora na linha
Image1.picture.Assign(CaptureScreenRect(Rect(7,4,Screen.Width,Screen.Height)));
Gostei + 0
03/07/2006
Paullsoftware
function CapturaTela: TBitmap; var dc:hdc; cv:TCanvas; begin result := TBitmap.Create; result.Width := Screen.Width; result.Height := Screen.Height; dc := GetDc(0); cv := TCanvas.Create; cv.Handle := DC; result.Canvas.CopyRect(Rect(0, 0,Screen.Width,Screen.Height), cv,Rect(0,0,Screen.Width, Screen.Height)); cv.Free; ReleaseDC (0, DC); end;
essa outra compressiona o Bitmap para Jpeg para transmitir para o servidor...
procedure BmpToJpg(const Bitmap : TBitmap; var AStream: TMemoryStream); var Jpg: TJpegImage; begin Jpg := TJpegImage.Create; try Try jpg.PixelFormat := jf8Bit; Except End; Try jpg.CompressionQuality := 30; Except End; Try jpg.Compress; Except End; // Jpg.CompressionQuality := 30; // Jpg.PixelFormat := jf8Bit; Jpg.Assign(Bitmap); Jpg.SaveToStream(AStream); finally Jpg.Free end; end; (* BMPtoJPG *)
Modo de usar:
pic := TBitmap.Create; JpegStream := TMemoryStream.Create;//aqui estou usando Stream, mais vc pode substituir pelo nome de um arquivo.. pic :=CapturaTela; BmpToJpg(pic, JpegStream);
Gostei + 0
04/07/2006
Zlink
var nomeArq:string;
ano, mes, dia, hor, min, seg, Mseg:word;
pic : tBitmap;
begin
try
DecodeDateTime(Now,ano,mes,dia,hor,min,seg,mseg);
nomeArq := IntToStr(ano)+FormatFloat(´00´,mes)+IntToStr(dia)+´-´+IntToStr(hor)+IntToStr(min)+IntToStr(seg);
nomeArq := ExtractFilePath(Application.ExeName) +nomeArq;
pic := TBitmap.Create;
pic :=CapturaTela;
Image1.picture.Assign(pic);
Image1.picture.SaveToFile(nomeArq+´.bmp´);
except
Image1.Destroy
end;
end;
Como eu disse esse código fica no timer, a cada intervalo ele salva, mais está dando o senguinte erro
Projec Project1.exe raised exception classs EOutOfResouces with message
´Espaço insuficiente de armazenamento para processar este comando.´
Projet stopped. Use step or Run to continue.
Você tem algo que funcione, agradeço desde já. ?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)