2016-08-13 3 views
0

아래 예에서 빨간색 배경의 사각형 (512x260)에 가로로 256x256 픽셀의 두 비트 맵 (노란색과 파란색)을 가로로 (0-255와 256-511) . 스케일링은 없습니다. 질문은 왜 배경의 수직 픽셀 선 (빨간색)이 둘 사이에서 볼 수 있습니까? 델파이는 10.1delphi fmx DrawBitmap 함수

unit Unit1; 

interface 

uses 
    System.SysUtils, System.Types, System.UITypes, System.Classes, 
    System.Variants, 
    FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects, 
    FMX.Controls.Presentation, FMX.StdCtrls; 

type 
    TForm1 = class(TForm) 
    PaintBox1: TPaintBox; 
    procedure PaintBox1Paint(Sender: TObject; Canvas: TCanvas); 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    private 
    { Private declarations } 
    bm1: TBitmap; 
    bm2: TBitmap; 
    br: TStrokeBrush; 
    bShift: Boolean; 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.fmx} 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    bm1 := TBitmap.Create(256, 256); 
    if bm1.Canvas.BeginScene then 
    try 
     bm1.Canvas.Fill.Color := TAlphaColorRec.Yellow; 
     bm1.Canvas.FillRect(RectF(0, 0, bm1.Width, bm1.Height 
     ), 
     0, 0, AllCorners, 1); 
    finally 
     bm1.Canvas.EndScene; 
    end; 
    bm2 := TBitmap.Create(256, 256); 
    if bm2.Canvas.BeginScene then 
    try 
     bm2.Canvas.Fill.Color := TAlphaColorRec.Blue; 
     bm2.Canvas.FillRect(RectF(0, 0, bm2.Width, bm2.Height 
     ), 
     0, 0, AllCorners, 1); 
    finally 
     bm2.Canvas.EndScene; 
    end; 

end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin 
    bm1.Free; 
    bm2.Free; 
end; 

procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas); 
var 
    RecPic: TRectF; 
    RecCanvas: TRectF; 
    RecCanvas2: TRectF; 
begin 
    if Canvas.BeginScene then 
    try 
     Canvas.Fill.Color := TAlphaColorRec.White; 
     Canvas.FillRect(RectF(0, 0, PaintBox1.Width, PaintBox1.Height 
     ), 
     0, 0, AllCorners, 1); 

     Canvas.Fill.Color := TAlphaColorRec.Red; 
     Canvas.FillRect(RectF(0, 0, 511, 260 
     ), 
     0, 0, AllCorners, 1); 
     RecPic := RectF(0, 0, 255, 255); 
     RecCanvas := RectF(0, 0, 255, 255); 
     Canvas.DrawBitmap(bm1, RecPic, RecCanvas, 1); 

     RecCanvas2 := RectF(256, 0, 511, 255); 
     Canvas.DrawBitmap(bm2, RecPic, RecCanvas2, 1); 
    finally 
     Canvas.EndScene; 
    end; 
end; 

end. 

고마워요에게

답변

0

당신은 RectF (256, 0, 512, 256)로 RectF (0, 0, 256, 256) 및 RecCanvas2로 RecCanvas를 사용해야합니다 오른쪽 하단 국경 때문에 비트 맵 도면 영역에서 제외됩니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 "오른쪽 및 아래쪽 테두리가 비트 맵 그리기 영역에서 제외되었습니다"라는 정보를 어디서 발견 했습니까? 나는 결코 그것을 들었다. – epo2001

+0

그냥 경험 :) –