Captura sequência de tela

Delphi

04/07/2006

Estou tentando capturar uma sequência de tela, mais está dando erro, após umas 20 a 30 telas capturas.

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.

Estou usando este código, já usei outros que tem no site e que outros colaboradores informou, mais ainda não consegui.

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;
// Palette := GetSystemPalette;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image1.picture.Assign(CaptureScreenRect(Rect(0,0,Width,Height)));
end;

Alguém pode testa e dar uma solução ?
no form tem um tTimer1, um TImage;

Muito obrigado


Zlink

Zlink

Curtidas 0

Respostas

Zlink

Zlink

04/07/2006

E aí galera, ninguem vai testar o código para desvendar o problema ?


GOSTEI 0
Host

Host

04/07/2006

EOutOfResources .... né..
O negocio era ou fazer um contador para cada 25 imagens , e dar um clear no TImage... ou criar um TImage para cada 25 imagens por exemplo EOutOfResource herda a classe e OutofMemory ai tu ja sentiu o tranco.... Seria legal descobrir como a gente modifica o tamanho da memoria disponivel ... o TImage ultiliza na propriedade picture um TPicture que dentro do Graphics.pas aparentemente liga ao processo pela procedure SaveToClipboardFormat(var AFormat: Word; var AData: THandle; var APalette: HPALETTE); , deveria ter um jeito de aumentar a memoria , pera ai ... cara na classes.pas esta declarada a classe TStream.. acredito ser este o mentecapto.... hehehe .... pera ai q vou testar mas .... o que vou fazer é o seguinte ... vou copiar o classes.pas pro diretorio da minha aplicação e vou mudar o tamanho das variaveis das procedures que aparentam entrar no processo de leitura para memoria ..... faz o mesmo q a gente se fala depois.....[/img]


GOSTEI 0
Massuda

Massuda

04/07/2006

Parece que você nào está destruindo os bitmaps que está gerando a cada captura, o que está consumindo toda a memória da máquina. Experimente fazer algo assim...
procedure TForm1.Timer1Timer(Sender: TObject); 
var
  Bitmap: TBitmap;
begin 
  Bitmap := CaptureScreenRect(Rect(0,0,Width,Height));
  Image1.picture.Assign(Bitmap); 
  Bitmap.Free;
end;



GOSTEI 0
Zlink

Zlink

04/07/2006

Ok, muito obrigado, resolveu o problema.
10


GOSTEI 0
POSTAR