2009-09-02 3 views
1

Я хотел бы написать фрагмент кода, который создает изображения, похожие по стилю, на изображения, полученные с помощью «Balsamiq Mockups» или «yUML» с использованием платформы .NET.Создание эффекта рисования вручную с использованием .NET.

Может ли кто-нибудь сказать мне, как достичь ручного эффекта карандаша, используя GDI +?

Текст, очевидно, может быть сделан с использованием правильного шрифта - мой вопрос заключается в том, как визуализировать линии, прямоугольники и круги.

Спасибо!

+0

Возможно, вы захотите посмотреть на вопрос «Как вы рисуете, как карандаш?» http://stackoverflow.com/questions/509310/how-do-you-draw-like-a-crayon – KingNestor

+0

@KingNestor: «Дайте человеку карандаш, и он будет рисовать на один день. Научите человека писать программное обеспечение, которое рисуется как карандаш, и он будет работать в Burger King на всю жизнь ». – MusiGenesis

+1

Я бы посмотрел SketchFlow, прежде чем начинать с этого. WPF может быть лучшей технологией для просмотра оконных форм. (оставляя мой комментарий здесь, а не ответ) –

ответ

4

GDI + лучше всего подхожу для рисования графики Прямоугольного типа, но вы можете использовать его, чтобы произвести такой эффект, как это:

alt text http://img7.imageshack.us/img7/3497/crudite.jpg

... с помощью DrawBezier метода из Графический объект. Вот фрагмент кода, который делает изображение выше:

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; 

ключей от этого эффекта с помощью Pen с большой шириной (7.0F в данном примере), и устанавливающее SmoothingMode вашего графического объекта к HighQuality (с это похоже на задницу с по умолчанию SmoothingMode).

Было бы относительно легко написать собственные методы, в которых вы указываете формы, которые должны быть нарисованы обычным способом GDI + (прямоугольники, координаты и радиусы и т. Д.), А затем ваш код переводит линии этих элементов в координаты Безье, где вы слегка изменяете позиции вещей случайным образом на несколько пикселей в каждом направлении.

+0

@MusiGenesis, видя, что SketchFlow разработан с WPF, я бы не подумал, что вы будете много торговать. –

Смежные вопросы