首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >delphi fmx DrawBitmap函数

delphi fmx DrawBitmap函数
EN

Stack Overflow用户
提问于 2016-08-13 23:10:23
回答 1查看 2.2K关注 0票数 0

在下面的示例中,您可以看到应用程序在红色背景矩形(512x260)上水平并排绘制了两个256x256像素的位图(黄色和蓝色) (0-255和256-511)。没有缩放。问题是,为什么可以在两者之间查看背景(红色)的垂直像素线?Delphi 10.1

代码语言:javascript
复制
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.

非常感谢

EN

回答 1

Stack Overflow用户

发布于 2016-09-03 18:02:46

必须将RecCanvas用作RectF(0,0,256,256),将RecCanvas2用作RectF(256,0,512,256),因为右边框和下边框不在位图绘图区域中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38934076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档