您的位置:首页 > 其它

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

2008-12-07 20:53 176 查看
有一位网友在问,如何做到下图所示的效果:

 



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

你先将你的文字加入到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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gdi+ 算法 path