Robiłem już zrzuty wieloma sposobami, niestety zawsze podczas robienia zdięcia program zawiesza na około 0,5sec myszkę/pracę na kompie i jest to uporczywe.
Pracuję nad programem do np nagrywania zawartości pulpitu podczas gry, na razie chcę jedynie aby zapisywał się do plików jpg co ok kilka sekund, niestety zawiesza na 0,5 kompa podczas zdięcia:(
znalazłem fajną funkcię :
const cTileSize = 50;
function TForm1.GetScreenShot: TBitmap;
var X, Y, XS, YS : Integer;
Locked : Boolean;
Canvas : TCanvas;
R : TRect;
begin
Result := TBitmap.Create;
Result.Width := Screen.Width;
Result.Height := Screen.Height;
Canvas := TCanvas.Create;
Canvas.Handle := GetDC(0);
Locked := Canvas.TryLock;
try
XS := Pred(Screen.Width div cTileSize);
if Screen.Width mod cTileSize > 0 then
Inc(XS);
YS := Pred(Screen.Height div cTileSize);
if Screen.Height mod cTileSize > 0 then
Inc(YS);
for X := 0 to XS do
for Y := 0 to YS do
begin
R := Rect(
X * cTileSize, Y * cTileSize, Succ(X) * cTileSize,
Succ(Y) * cTileSize);
Result.Canvas.CopyRect(R, Canvas, R);
end;
finally
if Locked then
Canvas.Unlock;
ReleaseDC(0, Canvas.Handle);
Canvas.Free;
end;
end
Robi kilka małych zrzutów i łączy w jeden :) i zwraca jako tbitmap, jest ona zajedwabista i spełnia moje wymagania, ale nie mogę jej użyć wiecej niż kilka razy bo program się zwiesza.
Pewnie jest to spowodowane tym, że nie jest zwraca pamieci po operacji czyli brak np. GetScreenShot.Free / czy wie ktoś jak zwolnić pamięć? albo jak przedłużyć możliwość wykonywania tej funkcji?