2013-10-18 3 views
2

Firemonkey를 사용하여 델파이 XE5에서 안드로이드 어플리케이션을 만들고 있습니다. 제 폼 중 하나의 경우 비트 맵에서 그릴 수있는 전체 폼을 채울 TImage가 필요합니다. 내 폼에 TImage의 구성 요소를 추가하고 설정 정렬델파이 안드로이드의 컴포넌트 크기

  1. 것 : =을 alClient 내가 무슨 짓을

    이이었다. 디자이너에서는 전체 양식을 채 웁니다. 내 FormCreate 과정에서

  2. 나는 내가 TImage의의 Bitmap.Canvas에 그릴

    procedure TDrawForm.FormCreate(Sender: TObject); 
    begin 
        Image1.Bitmap.SetSize(Trunc(Image1.Width), Trunc(Image1.Height)); 
        DrawFromList(Image1); 
    end; 
    
  3. 그런 다음 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 태블릿에서 정상적으로 작동하지만 화면 전체를 채우지는 못합니다 :

enter image description here

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 프로 시저에서 비트 맵 크기를 업데이트 해 보았지만 차이는 없습니다.

+0

TImage는 실제로 FormCreate의 최종 크기입니까, 아니면 나중에 다시 조정할 수 있습니까? FormCreate에서 TImage의 크기를 기록한 다음 나중에 다시 수행하십시오. 어쨌든, 비트 맵의 ​​크기를 변경하는 대신, TImage.WrapMode를 사용하여 이미지의 크기를 자동 조절하십시오. –

+0

@MarcusAdams 값을 출력하는 버튼을 만들었지 만 변경되지 않습니다. 그래서 TImage는 이미 FormCreate에 최종 크기가 있다고합니다. Screen.Size 속성도 이상한 숫자를 제공합니다 (800 x 1280 대신 600 x 905). – Daniel

답변

2

문제점에 대한 해결책을 찾았습니다. 외관상으로는 구성 요소에 스케일을 반환하는 두 가지 속성이 있습니다. 다행히도이 배율에 구성 요소의 너비와 높이를 곱하면 너비와 높이가 이고 픽셀은입니다. 내 경우

Image1.Scene.GetSceneScale 
Image1.Canvas.Scale 

는,이처럼 내 비트 맵을 초기화했다 : =을 alClient을 :

Image1.Bitmap.SetSize(Trunc(Image1.Width * Image1.Canvas.Scale), 
         Trunc(Image1.Height * Image1.Canvas.Scale)); 

이 이미지가 정렬로 설정되어 있기 때문에 전체 화면을 채울 내 이미지 1의 비트 맵을 만든다.

Image1.Width 및 Image1.Height (또는 그 문제에 대한 Screen.Size)에 의해 반환 된 원래 크기가 아직 측정되지 않았지만 항상 픽셀이 아닌 것은 알 수 있습니다. 이것이 어딘가에 기록되어 있다면 약 2 주간의 두통을 덜어 줬을 것입니다.

관련 문제