Dieser funktioniert auch Grundsätzlich, da das von mir aufgenommene Rechteck in der Regel aber recht klein und mein 4K Monitor doch recht groß ist, dauert der Umweg über den "kompletten" Screenshoot ewig (ca. 100ms).
Sieht da einer von Euch wie man das Beschleunigen könnte ?
Code: Alles auswählen
Function CaptureScreenRect(aTopLeft, aBottomRight: TPoint): TBitmap;
Var
ScreenDC: HDC;
tmp: TBitmap;
Begin
tmp := TBitmap.Create;
{$IFDEF WINDOWS}
tmp.Width := Screen.DesktopWidth;
tmp.Height := Screen.DesktopHeight;
tmp.Canvas.Brush.Color := clWhite;
tmp.Canvas.FillRect(0, 0, tmp.Width, tmp.Height);
ScreenDC := GetDC(GetDesktopWindow);
BitBlt(tmp.Canvas.Handle, 0, 0, tmp.Width, tmp.Height, ScreenDC, Screen.DesktopLeft, Screen.DesktopTop, SRCCOPY);
ReleaseDC(0, ScreenDC);
{$ENDIF}
{$IFDEF LINUX}
tmp.Height := Screen.Height;
tmp.Width := Screen.Width;
ScreenDC := GetDC(0);
tmp.LoadFromDevice(ScreenDC);
ReleaseDC(0, ScreenDC);
{$ENDIF}
result := TBitmap.Create;
result.Width := abs(aTopLeft.X - aBottomRight.X + 1);
result.Height := abs(aTopLeft.Y - aBottomRight.Y + 1);
result.Canvas.Draw(-min(aTopLeft.X, aBottomRight.X), -min(aTopLeft.Y, aBottomRight.Y), tmp);
tmp.free;
End;
