Usage:
var
B: TBitmap;
begin
B := MakeScaleScreenshot(Self);
Image2.Bitmap.Assign(B);
B.DisposeOf;
end;
Function:
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;
There are a couple StackOverflow questions relevant to to this function and are what I used when researching this function. There is also a topic at Embarcadero about multiresolution bitmaps. They are:
FireMonkey TControl.MakeScreenshot generates an undersized bitmap on Mobile platforms
Firemonkey drawing on bitmap without interpolation
Using Multi-Resolution Bitmaps In Delphi XE5 Firemonkey On Android And IOS