我想编写一段代码,该代码使用.NET框架创建类似于'Balsamiq Mockups'或'yUML'呈现的图像的图像。使用.NET创建手绘效果
有人可以告诉我如何使用GDI +来实现手绘铅笔效果吗?
文本显然可以使用正确的字体来完成 - 我的问题是如何呈现线条,框和圆圈。
谢谢!
我想编写一段代码,该代码使用.NET框架创建类似于'Balsamiq Mockups'或'yUML'呈现的图像的图像。使用.NET创建手绘效果
有人可以告诉我如何使用GDI +来实现手绘铅笔效果吗?
文本显然可以使用正确的字体来完成 - 我的问题是如何呈现线条,框和圆圈。
谢谢!
GDI +是最适合用于绘制直角型图形,但你可以用它来产生这样的效果:使用的的DrawBezier方法
alt text http://img7.imageshack.us/img7/3497/crudite.jpg
...图形对象。下面是使上述图像的代码片断:
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.FillRectangle(new SolidBrush(Color.White),
new Rectangle(0, 0, bmp.Width, bmp.Height));
Pen pen = new Pen(Color.Gray, 7.0F);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.DrawBezier(pen,
new Point(10, 10),
new Point(11, 41),
new Point(7, 147),
new Point(13, 199));
g.DrawBezier(pen,
new Point(7, 10),
new Point(87, 13),
new Point(213, 17),
new Point(319, 6));
g.DrawBezier(pen,
new Point(319, 4),
new Point(305, 53),
new Point(299, 107),
new Point(319, 203));
g.DrawBezier(pen,
new Point(13, 199),
new Point(33, 195),
new Point(150, 207),
new Point(319, 203));
}
pictureBox1.Image = bmp;
到这种效应的键被使用笔具有大宽度(7.0F在该示例中),以及设置图形的SmoothingMode反对高质量(因为这看起来像屁股默认的SmoothingMode)。
其中指定形状正常GDI +的方式来绘制这将是比较容易编写自定义方法(矩形和坐标和半径等),然后你的代码转换这些元素的线条为贝塞尔曲线的坐标,其中你在每个方向上稍微改变东西的位置几个像素。
@MusiGenesis,看到SketchFlow是用WPF开发的我不会认为你会交易太多。 – 2009-09-03 05:51:31
你可能想看看这个SO问题,“你怎么画得像蜡笔?” http://stackoverflow.com/questions/509310/how-do-you-draw-like-a-crayon – KingNestor 2009-09-03 00:42:54
@KingNestor:“给一个男人一支蜡笔,他会画一天。教一个人写信软件画得像蜡笔,他会在汉堡王工作一辈子。“ – MusiGenesis 2009-09-03 01:21:57
在开始使用之前,我会先看SketchFlow。 WPF可能是比Windows窗体更好的技术。 (留下我的评论在这里,而不是答案) – 2009-09-03 09:30:34