2016-08-13 2 views
0

В приведенном ниже примере вы можете увидеть, что приложение рисует два растровых изображения (желтый и синий) размером 256x256 пикселей бок о бок горизонтально (0-255 и 256-511) на красном прямоугольнике backgroud (512x260) , Нет масштабирования. Вопрос в том, почему вертикальная линия пикселей фона (красная) может быть просмотрена между ними? Delphi 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

Вы должны использовать RecCanvas в RectF (0, 0, 256, 256) и RecCanvas2 как RectF (256, 0, 512, 256), так как правая и нижняя границы исключены из области рисования растрового изображения

+0

Спасибо за ответ. Но где вы нашли информацию о том, что «правая и нижняя границы исключены из области рисования растрового изображения»? Я этого никогда не слышал. – epo2001

+0

просто опыт :) –

 Смежные вопросы

  • Нет связанных вопросов^_^