TLayout 컨트롤에서 비트 맵을 생성하려고합니다. 이렇게하려면 TControl.Makescreenshot 함수를 사용하고 있습니다. Windows에서 응용 프로그램을 테스트 할 때, 모든 것이 예상대로 작동 : 아이폰 OS, 안드로이드 (모두 에뮬레이터와 실제 장치)에서 응용 프로그램을 실행할 때FireMonkey TControl.MakeScreenshot은 모바일 플랫폼에서 크기가 작은 비트 맵을 생성합니다.
그러나
는, 결과는 주변이 (빨간색 테두리가 보이는 이미지가 단) 비트 맵의 테두리 안에 그려져 :
를 모바일 버전에서 이미지의 절반 크기이며, 테두리가 잘려.
저는 여기에 사용되는 코드입니다 :
(를 .pas)는
unit Unit15;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Objects, FMX.Layouts, FMX.Edit;
type
TForm15 = class(TForm)
Layout1: TLayout;
Image1: TImage;
Button1: TButton;
CheckBox1: TCheckBox;
Label1: TLabel;
Switch1: TSwitch;
ArcDial1: TArcDial;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form15: TForm15;
implementation
{$R *.fmx}
procedure TForm15.Button1Click(Sender: TObject);
begin
Image1.Bitmap := Layout1.MakeScreenshot;
Image1.Bitmap.Canvas.BeginScene;
try
Image1.Bitmap.Canvas.Stroke.Color := TAlphaColorRec.Red;
Image1.Bitmap.Canvas.DrawRect(RectF(1, 1, Image1.Bitmap.Width - 1, Image1.Bitmap.Height - 2), 0, 0, [], 1);
finally
Image1.Bitmap.Canvas.EndScene;
end;
Edit1.Text := format('Image = Width: %d - Height: %d', [Image1.Bitmap.Width, Image1.Bitmap.Height]);
Edit2.Text := format('Original = Width: %d - Height: %d', [Round(Layout1.Width), Round(Layout1.Height)]);
end;
procedure TForm15.FormResize(Sender: TObject);
begin
Layout1.Height := ClientHeight div 2;
end;
end.
(.fmx)
object Form15: TForm15
Left = 0
Top = 0
Caption = 'Form15'
ClientHeight = 460
ClientWidth = 320
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [dkDesktop]
OnResize = FormResize
DesignerMobile = True
DesignerWidth = 320
DesignerHeight = 480
DesignerDeviceName = 'iPhone'
DesignerOrientation = 0
DesignerOSVersion = '6'
object Layout1: TLayout
Align = alTop
ClipChildren = True
Height = 233.000000000000000000
Width = 320.000000000000000000
object Button1: TButton
Height = 44.000000000000000000
Position.X = 8.000000000000000000
Position.Y = 8.000000000000000000
TabOrder = 0
Text = 'Click to create Bitmap'
Trimming = ttCharacter
Width = 201.000000000000000000
OnClick = Button1Click
end
object CheckBox1: TCheckBox
Height = 23.000000000000000000
Position.X = 24.000000000000000000
Position.Y = 56.000000000000000000
TabOrder = 1
Text = 'CheckBox1'
Width = 120.000000000000000000
end
object Label1: TLabel
Height = 23.000000000000000000
Position.X = 24.000000000000000000
Position.Y = 88.000000000000000000
Text = 'Label1'
Width = 82.000000000000000000
Trimming = ttCharacter
end
object Switch1: TSwitch
Height = 27.000000000000000000
IsChecked = False
Position.X = 24.000000000000000000
Position.Y = 120.000000000000000000
TabOrder = 3
Width = 78.000000000000000000
end
object ArcDial1: TArcDial
Height = 81.000000000000000000
Position.X = 216.000000000000000000
Position.Y = 16.000000000000000000
TabOrder = 4
Width = 97.000000000000000000
end
object Edit1: TEdit
Touch.InteractiveGestures = [igLongTap, igDoubleTap]
TabOrder = 5
Position.X = 8.000000000000000000
Position.Y = 192.000000000000000000
Width = 305.000000000000000000
Height = 31.000000000000000000
KillFocusByReturn = False
end
object Edit2: TEdit
Touch.InteractiveGestures = [igLongTap, igDoubleTap]
TabOrder = 6
Position.X = 8.000000000000000000
Position.Y = 152.000000000000000000
Width = 305.000000000000000000
Height = 31.000000000000000000
KillFocusByReturn = False
end
end
object Image1: TImage
MultiResBitmap = <
item
end>
Align = alClient
Height = 227.000000000000000000
MarginWrapMode = iwOriginal
Width = 320.000000000000000000
WrapMode = iwOriginal
end
end
픽셀 밀도가 할 수있는 문제 일 경우, 혹은 FireMonkey입니다 곤충?
이미지 1의 정렬은 'alClient'입니다. 정렬을 'alNone'으로 설정하고 높이와 너비를 직접 설정하면 도움이됩니까? – Johan