| Subject: | Out of resources error! |
| Posted by: | Hossein Ahmadi (AhmadiSolness…@yahoo.com) |
| Date: | Fri, 15 Aug 2008 |
Hi
Im using "captureScreen" procedure to capture an image from screen.
It will run for each capture request from server(server will send request
when get last response)
....
// Client Side
compressedStream:=TMemoryStream.Create;
try
on capture request do
begin
newStream:=TMemoryStream.Create;
try
captureScreen(newStream);
compressStream(newStream,compressedStream);// this function
compress newStream and save ti compressedStream
finally
newStream.Free;
end;
end;
...
//Check other request type
...
sendToServer(compressedStream);
finally
compressedStream.free;
end;
...
Client show "Out of Resources" error after taking 2 to 5 images(randomize).
Notes:
If i trace my program with F7 or F8, it never throw error ! i don't know
why!!! (seems that a garbage collector fix the error)
If i change "jp.Assign(DesktopBitmap);" to "jp.loadfromfile('c:\pic1.jpg')"
, it never throw error ! i don't know why!!!
Here is my "captureScreen" procedure:
procedure captureScreen(m:TMemoryStream);
var i,j:integer;
DesktopBitmap:TBitmap;
jp:TJPEGImage;
begin
DesktopBitmap := TBitmap.Create;
try
with DesktopBitmap do
begin
Width := Screen.Width;
Height := Screen.Height;
end;
BitBlt(DesktopBitmap.Canvas.Handle,
0,0,Screen.Width,Screen.Height,
GetDC(GetDesktopWindow),0,0,SrcCopy);
jp:=TJPEGImage.Create;
try
jp.Assign(DesktopBitmap);
m.Position:=0;
jp.SaveToStream(m);
finally
jp.free;
end;
finally
DesktopBitmap.Free;
end;
end;