July 08, 2005

[Delphi] GDI+ PathGradientBrush (3)

PathGradientBrush3

凹凸のある多角形に適用してみた。周辺色は凹凸にかかわらず定義順に各頂点に順番に割り当てられる。

コードは
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;

この記事へのトラックバックURL