You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 12 FMX组件截图全黑?如何正确捕获组件内容

Delphi 12 FMX 捕获TLayout组件内容截图全黑的解决办法

在Delphi 12 FMX中,执行以下代码后生成的BMP文件是TLayout形状的全黑图片,无法正确捕获包含TSpeedButton(内含TImage)的TLayout组件内容:

try
  Bmp := MyFMXLayout.MakeScreenshot;
  try
    Bmp.SaveToFile('C:\temp\mygraphic.bmp');
  finally
    Bmp.Free;
  end;
except
  on E:Exception do
    ShowMessage(E.Message);
end;

最小复现步骤:

  • 将TLayout命名为MyFMXLayout
  • 在布局上放置一个TSpeedButton
  • 在按钮上放置TImage并设置显示图形

解决方法

1. 强制组件完成渲染再截图

调用MakeScreenshot前,先触发组件重绘并等待消息处理,确保所有子组件渲染完成:

try
  MyFMXLayout.Repaint;
  Application.ProcessMessages;
  Bmp := MyFMXLayout.MakeScreenshot;
  try
    Bmp.SaveToFile('C:\temp\mygraphic.bmp');
  finally
    Bmp.Free;
  end;
except
  on E:Exception do
    ShowMessage(E.Message);
end;

2. 截取Form后裁剪Layout区域

如果TLayout在可见的Form上,先截取整个Form截图,再裁剪出Layout对应的区域:

var
  FormBmp: TBitmap;
  LayoutRect: TRectF;
begin
  try
    FormBmp := Self.MakeScreenshot;
    try
      LayoutRect := MyFMXLayout.AbsoluteRect;
      FormBmp.CopyFromBitmap(FormBmp.RectToBitmap(LayoutRect), 0, 0);
      FormBmp.SaveToFile('C:\temp\mygraphic.bmp');
    finally
      FormBmp.Free;
    end;
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;

3. 手动绘制组件到Bitmap

通过PaintTo方法直接将Layout及其子组件绘制到目标Bitmap画布:

var
  Bmp: TBitmap;
begin
  try
    Bmp := TBitmap.Create(Trunc(MyFMXLayout.Width), Trunc(MyFMXLayout.Height));
    Bmp.PixelFormat := TPixelFormat.BGRA8;
    try
      Bmp.Canvas.BeginScene;
      try
        MyFMXLayout.PaintTo(Bmp.Canvas, TRectF.Create(0, 0, Bmp.Width, Bmp.Height));
      finally
        Bmp.Canvas.EndScene;
      end;
      Bmp.SaveToFile('C:\temp\mygraphic.bmp');
    finally
      Bmp.Free;
    end;
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;

注意事项

  • 确保TLayout的Visible属性为True,且未处于隐藏容器(如未激活的Tab页)中
  • 若Layout在滚动容器内,需确保目标区域处于可视范围
  • 包含透明元素时,设置Bitmap的PixelFormat为BGRA8以保留透明度

内容的提问来源于stack exchange,提问作者Mike at Bookup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:55:06