GDI+中关于文字整体形状的变换

有一位网友在问,如何做到下图所示的效果:

 

由于时间关系(太忙,见谅!),我这里只说思路。


你先将你的文字加入到GraphicsPath中,比如:

GraphicsPath gpText = new GraphicsPath();
gpText.AddString(...);
//取得path的外接矩形,做这一步的目的是为了控制后面需要的点的变换方程
RectangleF rectText = gpText.GetBounds();
PointF[] points = gpText.PathPoints;
PointF[] pointsTmp = new PointF[points.Count];
for(int i=0; i < points.Length; i++)
{
    //这里对你的关键点进行变形处理,比如:pointsTmp[i].Y = yourNewYValue;

    //yourNewYValue需要根据你的变形方式写方程式,比如:sin(),cos()等等,上面是椭圆形的下部部分,这一块需要写出模拟方程式;当然也可以将那一部分看成Cos()或Sin()函数的一小部分,这样应该比模拟椭圆更方便。由于时间关系,我就不再写具体的算法了。
    //pointsTmp[i].X = yourNewXValue;如果缩小为原来的50%,则pointsTmp[i].X = points[i].X;如果不变形的话,则:pointsTmp[i].X = points[i].X;
}
之后,GraphicsPath gpTextResult = new GraphicsPath();
gpTextResult = new GraphicsPath(pointsTmp, gpText.PathTypes);
最后,就是画你的结果了,比如:graphics.FillPath(...);

OK。

你可能感兴趣的:(算法,Path,GDI+)