Firemonkey를 사용하여 델파이 XE5에서 안드로이드 어플리케이션을 만들고 있습니다. 제 폼 중 하나의 경우 비트 맵에서 그릴 수있는 전체 폼을 채울 TImage가 필요합니다. 내 폼에 TImage의 구성 요소를 추가하고 설정 정렬델파이 안드로이드의 컴포넌트 크기
것 : =을 alClient 내가 무슨 짓을
이이었다. 디자이너에서는 전체 양식을 채 웁니다. 내 FormCreate 과정에서나는 내가 TImage의의 Bitmap.Canvas에 그릴
procedure TDrawForm.FormCreate(Sender: TObject); begin Image1.Bitmap.SetSize(Trunc(Image1.Width), Trunc(Image1.Height)); DrawFromList(Image1); end;
그런 다음 TImage의 크기에 크기의 설정하여 TImage의의 비트 맵을 초기화
procedure TDrawForm.DrawFromList(image: TImage); var draw: TDraw; begin image.Bitmap.Canvas.BeginScene; image.Bitmap.Canvas.Clear(claBlue); image.Bitmap.Canvas.Stroke.Color := claBlack; image.Bitmap.Canvas.Fill.Color := claYellow; for draw in DrawList do begin image.Bitmap.Canvas.FillPath(draw.fpath, 1); image.Bitmap.Canvas.DrawPath(draw.fpath, 1); end; image.Bitmap.Canvas.EndScene; end;
이 코드는 Nexus 7 태블릿에서 정상적으로 작동하지만 화면 전체를 채우지는 못합니다 :
5,번째 그림에서 I는 전체 화면을 작성하기 위해, 1.34은 시행 착오에 의해 발견되었다
Image1.Bitmap.SetSize(Trunc(Image1.Width * 1.34), Trunc(Image1.Height * 1.34));
사용.
그런 다음 이미지와 화면의 크기를 인쇄하려고했습니다. 내 Nexus 7 (1280 x 800 픽셀)의 경우 전체 화면을 채우는 TImage 구성 요소의 너비는 601이고 높이는 880입니다. 따라서 비트 맵의 크기를 내 TImage의 크기로 설정하면, 비트 맵은 또한 601 x 880이기 때문에 전체 화면을 채우기 위해 비트 맵의 크기를 조절해야하는 이유가 설명됩니다. 화면 크기는 600 x 905 (Screen.Size 사용)로보고됩니다.
내 질문은입니다. 내 장치의 실제 해상도가 800 x 1280 일 때 왜 TImage 구성 요소의 크기가 601 x 880 (화면 만 600 x 905)입니까? 이 크기가 픽셀이 아니라면 무엇입니까? 더 중요한 것은이 숫자를 실제 화면 픽셀로 변환하는 방법 (마음에두고 1.34은 Nexus 7에서만 작동합니다. HTC Sensation에서 더 큰 화면이 필요했습니다.)
동료 중 한 사람이 화면의 DPI와 관련이 있다고 제안했지만 현재 장치의 DPI를 제공 할 방법을 찾을 수 없습니다.
또한 FormResize 프로 시저에서 비트 맵 크기를 업데이트 해 보았지만 차이는 없습니다.
TImage는 실제로 FormCreate의 최종 크기입니까, 아니면 나중에 다시 조정할 수 있습니까? FormCreate에서 TImage의 크기를 기록한 다음 나중에 다시 수행하십시오. 어쨌든, 비트 맵의 크기를 변경하는 대신, TImage.WrapMode를 사용하여 이미지의 크기를 자동 조절하십시오. –
@MarcusAdams 값을 출력하는 버튼을 만들었지 만 변경되지 않습니다. 그래서 TImage는 이미 FormCreate에 최종 크기가 있다고합니다. Screen.Size 속성도 이상한 숫자를 제공합니다 (800 x 1280 대신 600 x 905). – Daniel