2009-09-02 57 views
1

我想编写一段代码,该代码使用.NET框架创建类似于'Balsamiq Mockups'或'yUML'呈现的图像的图像。使用.NET创建手绘效果

有人可以告诉我如何使用GDI +来实现手绘铅笔效果吗?

文本显然可以使用正确的字体来完成 - 我的问题是如何呈现线条,框和圆圈。

谢谢!

+0

你可能想看看这个SO问题,“你怎么画得像蜡笔?” http://stackoverflow.com/questions/509310/how-do-you-draw-like-a-crayon – KingNestor 2009-09-03 00:42:54

+0

@KingNestor:“给一个男人一支蜡笔,他会画一天。教一个人写信软件画得像蜡笔,他会在汉堡王工作一辈子。“ – MusiGenesis 2009-09-03 01:21:57

+1

在开始使用之前,我会先看SketchFlow。 WPF可能是比Windows窗体更好的技术。 (留下我的评论在这里,而不是答案) – 2009-09-03 09:30:34

回答

4

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 +的方式来绘制这将是比较容易编写自定义方法(矩形和坐标和半径等),然后你的代码转换这些元素的线条为贝塞尔曲线的坐标,其中你在每个方向上稍微改变东西的位置几个像素。

+0

@MusiGenesis,看到SketchFlow是用WPF开发的我不会认为你会交易太多。 – 2009-09-03 05:51:31