凹凸のある多角形に適用してみた。周辺色は凹凸にかかわらず定義順に各頂点に順番に割り当てられる。
コードは
uses
GDIPAPI, GDIPOBJ;
procedure TForm1.Button1Click(Sender: TObject);
const
sc: array[0..9] of TGPColor = (aclYellow, aclGreen, aclBlue, aclRed, aclOrange,
aclYellow, aclGreen, aclBlue, aclRed, aclOrange);
var
pts: array[0..9] of TGPPointF;
i, r, scnum: integer;
path: TGPGraphicsPath;
br: TGPPathGradientBrush;
gr: TGPGraphics;
mtrx : TGPMatrix;
begin
scnum := 10;
for i := 0 to 9 do
begin
r := 50 + 50*(i mod 2);
pts[i].X := r*cos(pi*(36*i+18)/180) + 120;
pts[i].Y := r*sin(pi*(36*i+18)/180) + 120;
end;
path := TGPGraphicsPath.Create();
path.AddPolygon(PGPPointF(@pts), 10);
br := TGPPathGradientBrush.Create(path);
br.SetCenterColor(aclWhite);
br.SetSurroundColors(PARGB(@sc), scnum);
gr := TGPGraphics.Create(Canvas.Handle);
gr.SetSmoothingMode(SmoothingModeAntiAlias);
gr.FillPath(br, path);
mtrx := TGPMatrix.Create;
mtrx.Translate(200,0);
path.Transform(mtrx);
br.SetTransform(mtrx);
br.SetCenterColor(aclBlack);
br.SetGammaCorrection(true);
gr.FillPath(br, path);
mtrx.Free;
gr.Free;
br.Free;
path.Free;
end;
Posted by junki560 at 16:44│
Comments(0)│
TrackBack(0)