Ver Mensaje Individual
  #3  
Antiguo 14-12-2012
rounin rounin is offline
Miembro
 
Registrado: sep 2005
Posts: 43
Reputación: 0
rounin Va por buen camino
Yo hago eso usando FillPath
(BeginPath, PolyBezierTo, CloseFigure, EndPath, FillPath)

Ejemplo de mi libreria

Código Delphi [-]
 
procedure TRBezier.FillArea(Layer: TRLayer);
var i, ip1: Integer;
    pt0, pt1, rpt, lpt: TPoint;
    _pt0, _pt1, _rpt, _lpt: TPointF;
    pts: array[0..3]of TPoint;
begin
  BeginPath(Layer.Canvas.Handle);
  Layer.Converter.LogicToScreen(X[Low], Y[Low], pt0.X, pt0.Y);
  MoveToEx(Layer.Canvas.Handle, pt0.X, pt0.Y, nil);
  for i := Low to High + Integer(Closed)-1 do
  begin
    ip1 := (i+1) mod Length;
    _pt0 := PointF(X[i], Y[i]);
    _pt1 := PointF(X[ip1], Y[ip1]);
    Layer.Converter.LogicToScreen(X[ip1], Y[ip1], pt1.X, pt1.Y);
    case SegmentType[i] of
      stBezier:
      begin
        // Relative control points
        _rpt := RCtrlPt[i];
        _lpt := LCtrlPt[ip1];
        // Absolute control points
        OffsetPointF(_rpt, _pt0.X, _pt0.Y);
        OffsetPointF(_lpt, _pt1.X, _pt1.Y);
        Layer.Converter.LogicToScreen(_rpt.X, _rpt.Y, rpt.X, rpt.Y);
        Layer.Converter.LogicToScreen(_lpt.X, _lpt.Y, lpt.X, lpt.Y);
        pts[1] := rpt;
        pts[2] := lpt;
        pts[3] := pt1;
        PolyBezierTo(Layer.Canvas.Handle, pts[1], 3);
      end;
      stLine: PolyLineTo(Layer.Canvas.Handle, pt1, 1);
    end;
  end;
  CloseFigure(Layer.Canvas.Handle);
  EndPath(Layer.Canvas.Handle);
  FillPath(Layer.Canvas.Handle);
end;
Responder Con Cita