GDI+能否将字符串画到一条曲线上?

-汪帆- 2010-02-26 01:30:51

如题,不知这个效果能否实现。



// 我在form上画了一条曲线,有一定宽度,就是笔的宽度
GraphicsPath path = new GraphicsPath();
path.AddCurve(points); // points是曲线上的点集合。

// 现在希望在这条曲线上显示文字。
StringFormat format = new StringFormat(StringFormatFlags.NoClip);
path.AddString("Hello", new FontFamily("宋体"), (int)FontStyle.Bold, 5f, this.points[0], format);

graphics.DrawPath(myPen, path);



字符串显示不了,曲线起始处出现一些不规则形状。
...全文
103 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
-汪帆- 2010-02-26
  • 打赏
  • 举报
回复
引用 12 楼 zhqwedsa 的回复:
1.先求出来字符需要旋转的角度
2.用RotateTransform方法旋转Graphics 世界变换矩阵,在新的坐标系下找到对应的位置把字符串画上去
3.把Graphics 的世界变换矩阵还原

这个可以旋转角度,我知道。但转了之后字符串还是直的,跟我说的随着曲线一起弯曲不一样
zhqwedsa 2010-02-26
  • 打赏
  • 举报
回复
1.先求出来字符需要旋转的角度
2.用RotateTransform方法旋转Graphics 世界变换矩阵,在新的坐标系下找到对应的位置把字符串画上去
3.把Graphics 的世界变换矩阵还原
打转的风铃 2010-02-26
  • 打赏
  • 举报
回复
其实用GDI+,字也是画上去的,楼主,我不知道封装好的方法里有没有可以调整字体倾斜度的参数,如果可以的话,你也可以自己写一个这样的方法.要不可怎么调整字体的倾斜度啊?想不出来了!
打转的风铃 2010-02-26
  • 打赏
  • 举报
回复
字体跟曲线一起弯,这个我表示关注一下!!!
zhushoudong 2010-02-26
  • 打赏
  • 举报
回复
现在你的是水平的?那应该有属性是设置是垂直的
-汪帆- 2010-02-26
  • 打赏
  • 举报
回复
引用 2 楼 strwangfan 的回复:
---曲线起始处出现一些不规则形状。---
发现原因了,是画笔的宽度太大。
画完曲线后,把画笔宽度调小再画字符串就能显示了,但是字符串不能跟着曲线一起动

我又将画字符串的方法改成这样:
C# code
graphics.DrawString("Hello", font, Brushes.Black,new Point(points[1].X- points[0].X, points[1].Y- points[0].Y));
就是以曲线上的第一个点和第二个点的连接直线段的中点为起始位置画字符串,
结果改变曲线的位置和形状时,字符串的位置飘忽不定,明显不在第一,二个点之间的连线上...

这个地方错了,更正下:

graphics.DrawString("Hello", font, Brushes.Black,
new Point(points[1].X +(points[0].X - points[1].X), points[1].Y + (points[0].Y-points[1].Y));
-汪帆- 2010-02-26
  • 打赏
  • 举报
回复
引用 6 楼 flyerwing 的回复:
可以的了,只要在画布上画就OK了!

怎么实现呢?
flyerwing 2010-02-26
  • 打赏
  • 举报
回复
可以的了,只要在画布上画就OK了!
-汪帆- 2010-02-26
  • 打赏
  • 举报
回复
效果基本上实现了,不过文字是水平的。
能否实现文字和曲线一起弯曲的效果呢?
-汪帆- 2010-02-26
  • 打赏
  • 举报
回复
不知道怎么传图片上来..
我就是想实现文字附着在曲线上的一个效果,曲线移动或者改变形状后,文字能够跟随曲线一起动
hhc123 2010-02-26
  • 打赏
  • 举报
回复
你最好把效果用pS表达出来看一下
-汪帆- 2010-02-26
  • 打赏
  • 举报
回复
---曲线起始处出现一些不规则形状。---
发现原因了,是画笔的宽度太大。
画完曲线后,把画笔宽度调小再画字符串就能显示了,但是字符串不能跟着曲线一起动

我又将画字符串的方法改成这样:

graphics.DrawString("Hello", font, Brushes.Black,
new Point(points[1].X - points[0].X, points[1].Y - points[0].Y));


就是以曲线上的第一个点和第二个点的连接直线段的中点为起始位置画字符串,
结果改变曲线的位置和形状时,字符串的位置飘忽不定,明显不在第一,二个点之间的连线上...
jin20000 2010-02-26
  • 打赏
  • 举报
回复
字体颜色要和画笔区分开来

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧