Delphi 多点梯度

Delphi 多点梯度,delphi,gradient,firemonkey,Delphi,Gradient,Firemonkey,我正在尝试将多点渐变应用于树形角。 如果我只设置一个两点梯度,一切都很好,但使用相同的树形角并尝试应用5个点,我只看到一个部分梯度 如果我使用Delphi IDE设置多点渐变,它在表单预览中工作得很好,问题是如何在代码中实现,我在搜索中找不到任何示例代码 以下是我正在尝试的代码: BlockBG := TRectangle.Create(MainForm); BlockBG.Parent

我正在尝试将多点渐变应用于树形角。 如果我只设置一个两点梯度,一切都很好,但使用相同的树形角并尝试应用5个点,我只看到一个部分梯度

如果我使用Delphi IDE设置多点渐变,它在表单预览中工作得很好,问题是如何在代码中实现,我在搜索中找不到任何示例代码

以下是我正在尝试的代码:

BlockBG                                 := TRectangle.Create(MainForm);
BlockBG.Parent                          := MainForm;
BlockBG.Fill.Kind                       := TBrushKind.Gradient;
BlockBG.SetBounds(0,0,clientWidth,clientHeight);

While BlockBG.Fill.Gradient.Points.Count < 5 do BlockBG.Fill.Gradient.Points.Add;

BlockBG.Fill.Gradient.Points[0].Color := $FF535b5e;
BlockBG.Fill.Gradient.Points[1].Color := $FFfefefe;
BlockBG.Fill.Gradient.Points[2].Color := $FF4a5154;
BlockBG.Fill.Gradient.Points[3].Color := $FFfdfdfd;
BlockBG.Fill.Gradient.Points[4].Color := $FF535b5e;
BlockBG.Fill.Gradient.Points[0].Offset := 0.0;
BlockBG.Fill.Gradient.Points[1].Offset := 0.25;
BlockBG.Fill.Gradient.Points[2].Offset := 0.5;
BlockBG.Fill.Gradient.Points[3].Offset := 0.75;
BlockBG.Fill.Gradient.Points[4].Offset := 1;

BlockBG.Repaint;

如果我注释掉FMX.Types.GlobalUseGPUCanvas:=True,这似乎是Delphi10.3中GPU画布实现中的一个bug;它可以正常工作。

偏梯度是什么意思?@TomBrunberg并不是梯度中的所有点都被绘制出来,但正如我在回答中所说的,这似乎是Delphi GPU画布错误。从何处注释出来?在windows应用程序中,画布在我的应用程序中默认不设置为GPU,我正在用GPU画布测试梯度代码,方法是将GlobalUseGPUCanvas设置为True。一旦GPU画布被禁用,渐变就会被正确渲染,因此我假设问题是GPU画布实现多点渐变中的一个bug。