如何得到贝塞尔曲线上点的坐标

来源:互联网 发布:2018年搞笑网络用语 编辑:程序博客网 时间:2024/06/09 23:52
微软的手册中说fltattenPath可作出文字跟随曲线的效果,而且只给了一个实现步骤,关于文字按角度输出的例子 网上,可搜索到,但是要文字虽曲线输出要得到曲线上点的坐标,如下代码即可实现:procedure TForm1.Button1Click(Sender: TObject);type TPointsArray = array[0..0] of TPoint; TTypesArray = array[0..0] of Byte; var CurvePts: array[0..3] of TPoint; Points: ^TPointsArray; Types: ^TTypesArray; PtCount: Integer; iCount: Integer; FormDC: HDC; ThePen, OldPen: HPEN; InfoString: String; begin {draw a bézier curve} CurvePts[0] := Point(30, 80); CurvePts[1] := Point(55, 30); CurvePts[2] := Point(105, 30); CurvePts[3] := Point(130, 80); FormDC := GetDC(Form1.Handle); BeginPath(FormDC); {draw a bézier curve} PolyBezier(FormDC, CurvePts, 4); EndPath(FormDC); {转化路径成线段} FlattenPath(FormDC); PtCount := GetPath(FormDC, Points^, Types^, 0); GetMem(Points, SizeOf(TPoint)*PtCount); GetMem(Types, PtCount);//用数据填充数组 GetPath(FormDC, Points^, Types^, PtCount);//这时points已经包含曲线上点坐标。 FreeMem(Points); FreeMem(Types);end; 
原创粉丝点击