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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值