我需要允许我在 Delphi 中以编程方式截取屏幕截图的代码。解决办法如下:
如何在 Delphi Android 应用程序中执行此操作?这是我的代码,但只捕获 TControls 而不是 Android 屏幕。
function MakeScaleScreenshot(Sender:TControl): TBitmap;
var
fScreenScale: Single;
function GetScreenScale: Single;
var
ScreenService: IFMXScreenService;
begin
Result := 1;
if TPlatformServices.Current.SupportsPlatformService (IFMXScreenService, IInterface(ScreenService)) then
begin
Result := ScreenService.GetScreenScale;
end;
end;
begin
fScreenScale := GetScreenScale;
Result := TBitmap.Create(Round(Sender.Width*fScreenScale), Round(Sender.Height*fScreenScale));
Result.Clear(0);
if Result.Canvas.BeginScene then
try
Sender.PaintTo(Result.Canvas, RectF(0,0,Result.Width,Result.Height));
finally
Result.Canvas.EndScene;
end;
end;
如果您想以编程方式捕获整个Android屏幕,可以使用以下代码:
uses
Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Net, FMX.Helpers.Android;
function TakeScreenshot: JBitmap;
var
WindowManager: JWindowManager;
Display: JDisplay;
DisplayMetrics: JDisplayMetrics;
ScreenBitmap: JBitmap;
begin
WindowManager := SharedActivityContext.getSystemService(TJContext.JavaClass.WINDOW_SERVICE);
Display := WindowManager.getDefaultDisplay;
DisplayMetrics := TJDisplayMetrics.Create;
Display.getMetrics(DisplayMetrics);
ScreenBitmap := TJBitmapClass.CreateBitmap(DisplayMetrics.widthPixels, DisplayMetrics.heightPixels, TJBitmap_Config.JavaClass.ARGB_8888);
TJViewGroup(SharedActivity.findViewById(TAndroidHelper.Activity.getWindow.getDecorView.getId)).draw(TJCanvas.JavaClass.init(ScreenBitmap));
Result := ScreenBitmap;
end;
它使用 Android API 来获取窗口管理器并显示指标。
它创建一个与 Android 屏幕大小相匹配的位图 (JBitmap)。
它使用draw方法捕获Android屏幕的内容并将其存储在位图中。
确保添加必要的 Android 依赖项并在您的 Delphi 项目中包含用于 Android 开发的正确单元