FMX:用背景颜色填充整个位图

时间:2014-07-08 04:06:04

标签: delphi canvas bitmap firemonkey graphic

我想创建一个TImage组件并用背景颜色填充图像。但是我的代码比我预期的要长一些。

  1. 我必须设置位图的宽度和高度。
  2. 我必须计算整个位图画布的矩形。
  3. 如果我没记错的话,在旧的Delphi版本中,我可以使用FloodFill以特定的颜色填充整个图像。所以我想我肯定错过了一些东西。

    有人能想出如何用更简单的代码填充背景颜色吗?

    Image := TImage.Create(nil);
    Image.Position.X := 100;
    Image.Position.Y := 100;
    Image.Width := 500;
    Image.Height := 500;
    Image.Bitmap.Width := Trunc(Image.Width);
    Image.Bitmap.Height := Trunc(Image.Height);
    with Image.Bitmap.Canvas do
    begin
      BeginScene;
      try
        Fill.Color := TAlphaColors.Black;
        FillRect(RectF(0, 0, Image.Bitmap.Width, Image.Bitmap.Height), 0, 0, [], 1.0);
      finally
        EndScene;
      end;
    end;
    

2 个答案:

答案 0 :(得分:5)

FMX中没有FloodFill。但您可以使用Clear(TAlphaColors.Black);以使用颜色填充整个位图。

答案 1 :(得分:3)

您必须设置位图尺寸的原因是因为位图大小不一定与TImage相同。您可以使用比TImage更小或更大的位图,然后使用WrapModes之一来确定如何将图像渲染到TImage:

WrapMode属性应该是TImageWrapMode类型中定义的常量之一:

  • iwOriginal:显示原始尺寸的图像。
  • iwFit:TImage矩形的最佳拟合(保持图像比例 - 宽度和高度之间的比率)。默认值。
  • iwStretch:拉伸图像以填充此TImage组件的整个矩形。
  • iwTile:将TImage图像平铺以覆盖TImage组件的整个矩形。

至于计算整个位图的矩形。如果您希望您的位图与TImage具有相同的大小,那么您可以轻松阅读TImage.ClipRect。

ClipRect通常是一个矩形,表示您可以渲染的控件的内部部分。在具有TPanel等边框的控件上,例如ClipRect尺寸小于整个控件尺寸。

正如Sebastian已经说过的那样,你可以使用TBitmap.Clear方法快速用一个collor填充整个Bitmap表面bacghroud。