在 Delphi 12.1 的 32 位 VCL 应用程序中,如何通过 Skia 将 SVG 文件加载到 TBitmap
并保留透明度?Skia 是 Delphi 12 自带的图形库,但在加载 SVG 文件时可能会遇到问题。
通过 TBitmap.SkiaDraw
方法可以加载 SVG 文件,但需要提前设置 TBitmap
的尺寸、像素格式和透明背景。以下是实现步骤:
- 1. 初始化 TBitmap
在调用SkiaDraw
之前,需要设置TBitmap
的宽度、高度、像素格式,并清除为透明背景。 - 2. 示例代码
以下是一个完整的示例代码,展示如何加载 SVG 文件到TBitmap
并保留透明度:
bmp := TBitmap.Create;
try
// 设置位图尺寸
bmp.Width := 100;
bmp.Height := 100;
// 设置像素格式为 32 位以支持透明度
bmp.PixelFormat := pf32bit;
// 清除位图为透明背景
bmp.Canvas.Brush.Color := clNone;
bmp.Canvas.FillRect(Rect(0, 0, bmp.Width, bmp.Height));
// 启用透明度支持
bmp.Transparent := True;
// 使用 SkiaDraw 加载 SVG 文件
bmp.SkiaDraw(
procedure(const ACanvas: System.Skia.ISKCanvas)
var
LSvgBrush: Vcl.Skia.TSkSvgBrush;
begin
LSvgBrush := Vcl.Skia.TSkSvgBrush.Create;
try
// 读取 SVG 文件内容
LSvgBrush.Source := TFile.ReadAllText('path/to/your/file.svg');
// 渲染 SVG 到位图
LSvgBrush.Render(ACanvas, System.Types.RectF(0, 0, 100.0, 100.0), 1);
finally
LSvgBrush.Free;
end;
end);
finally
bmp.Free;
end;
通过正确初始化 TBitmap
并使用 SkiaDraw
方法,可以将 SVG 文件加载到 TBitmap
并保留透明度。关键在于设置位图的尺寸、像素格式和透明背景。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END