Out of resources error!

Giganews Newsgroups
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;

Replies