【问题标题】:Firemonkey: TBitmap.Canvas drawing methods have no visible results. What am I doing wrong?Firemonkey:TBitmap.Canvas 绘图方法没有可见的结果。我究竟做错了什么?
【发布时间】:2011-12-01 03:15:45
【问题描述】:

背景

我/我正在构建一个自定义 FireMonkey GUI 控件。我想将控件呈现到后台缓冲区。后台缓冲区将绘制在控件的画布上。

  • 后台缓冲区是一个 Fmx.TBitmap 对象。

  • 我正在使用后台缓冲区,因为控件呈现代码涉及一点,并且不需要在每次重新绘制控件时调用。仅当某些控件属性更改时才会更新后台缓冲区。

问题

BackBuffer.Canvas 绘图操作没有可见效果。但是,清除位图或单独设置位图像素的值确实可以按预期工作。

由于某种原因,BackBuffer.Canvas 对象不会在后台缓冲区位图上绘制。

  • 我想我已经正确设置了所需的 Canvas.Fill 属性。
  • 我检查过的所有画布属性似乎都是正确的。 (画布宽度/高度/等)

我已经提取了相关代码,以防包含一些线索。

TMyControl(TControl)
private
protected
  BackBuffer : TBitmap;
  procedure Paint; override;
  procedure Resize; override;
public  
  constructor Create(AOwner: TComponent); override;
end;


constructor TMyControl.Create(AOwner: TComponent);
begin
  inherited;  

  BackBuffer := TBitmap.Create(10, 10);
end;

procedure TFxSampleDisplay.Resize;
var
  w, h : integer;
begin
  inherited;

  // Ensure BackBuffer is the same size as the control. 
  w := round(BoundsRect.Width);
  h := round(BoundsRect.Height);
  BackBuffer.SetSize(w,h);  
end;


procedure TMyControl.Paint;
var
  r : TRectF; 
begin
  inherited;

  //******** This has visible results ********
  BackBuffer.Clear($1100ff00);          // Fill with semi-opaque green background
  BackBuffer.Pixels[2,2] := $ffff0000;  // Draw a red pixel


  //******** This doesn't have visible results ********
  r.Left   := 0;
  r.Top    := 0;
  r.Right  := 50;
  r.Bottom := 50;
  BackBuffer.Canvas.Fill.Color := $ffff0000;          // Set fill to RED. 
  BackBuffer.Canvas.Fill.Kind  := TBrushKind.bkSolid; 
  BackBuffer.Canvas.FillRect(r, 10,10, AllCorners, 1);


  //********  Draw the backbuffer on to the controls canvas ******** 
  Canvas.DrawBitmap(BackBuffer, BoundsRect, BoundsRect, 1);


end;

【问题讨论】:

    标签: delphi user-interface firemonkey


    【解决方案1】:

    尝试用以下方式围绕您的绘图:

    BackBuffer.Canvas.BeginScene;
    .. 
    ..
    BackBuffer.Canvas.EndScene;
    BackBuffer.BitmapChanged;
    

    附:我是 FireMonkey 风格的新手,所以请尝试一下并写下它是否有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 2013-02-25
      • 2019-12-23
      • 2019-01-28
      • 2014-06-15
      相关资源
      最近更新 更多