GARANTIR DESCONTO

Fórum Capturar img do Desktop e salvar como jpeg. #237011

09/06/2004

0

estou com um problema eu tenho de fazer uma função que capture o desktop e salve em uma jpg

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

Crcam

Responder

Posts

09/06/2004

Fabio.hc

Tente assim:

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


Responder

Gostei + 0

03/07/2006

Zlink

é o seguinte, coloquei no evento Timer1Timer do Timer1, Button1.Click;

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 ?


Responder

Gostei + 0

03/07/2006

Jlimajr

Achei esta função na Net, veja ai se funciona

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;



Responder

Gostei + 0

03/07/2006

Zlink

Apresentou o mesmo erro na linha
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;


Responder

Gostei + 0

03/07/2006

Zlink

Já tentei

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)));


Responder

Gostei + 0

03/07/2006

Paullsoftware

Essa função captura a tela do usuário eu uso e funciona perfeitamente...
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);
espero ter ajudado :wink:


Responder

Gostei + 0

04/07/2006

Zlink

Tentei usar assim, mais continua dando erro quando chegar a salvar +- 30 imagem

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á. ?


Responder

Gostei + 0

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

Aceitar