If you’ve ever used the function MakeScreenshot which is part of most Firemonkey controls on mobile you may have noticed that it does not take a screenshot that is scaled to the device scale. So if you use MakeScreenshot from a TLayout the bitmap you end up with is most likely not the same size as the TLayout on the screen when used on mobile devices like Android and IOS. One solution to this is to get the screen scale using the GetScreenScale found in the TPlatformServices object. I have put together a function that makes this easier to do.
B := MakeScaleScreenshot(Self);
function MakeScaleScreenshot(Sender:TControl): TBitmap;
function GetScreenScale: Single;
Result := 1;
if TPlatformServices.Current.SupportsPlatformService (IFMXScreenService, IInterface(ScreenService)) then
Result := ScreenService.GetScreenScale;
fScreenScale := GetScreenScale;
Result := TBitmap.Create(Round(Sender.Width*fScreenScale), Round(Sender.Height*fScreenScale));
if Result.Canvas.BeginScene then
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:
Create Device Scaled Screenshots In Delphi XE5 Firemonkey On Android And IOS by Delphi XE5 XE6 XE7 XE8 10 Seattle Berlin Tokyo Firemonkey, Delphi Android, Delphi IOS is licensed under a Creative Commons Attribution 4.0 International License.