2009-09-02 11 views
1

.NETフレームワークを使用して 'Balsamiq Mockups'または 'yUML'でレンダリングされたものと似たスタイルの画像を作成するコードを記述したいと思います。.NETを使用して手描きのエフェクトを作成する

GDI +を使用して手描きの鉛筆効果を達成する方法を教えてもらえますか?

テキストは、明らかに正しいフォントを使用して行うことができます - 私の質問は、線、ボックスおよび円をどのようにレンダリングするかです。

ありがとうございます!

+0

「あなたはどうやってクレヨンのように描いていますか? http://stackoverflow.com/questions/509310/how-do-you-draw-like-a-crayon – KingNestor

+0

@KingNestor: "人にクレヨンを捧げると、彼は一日描くでしょう。クレヨンのように描くソフトウェアで、彼は一生バーガーキングで働くだろう」と語った。 – MusiGenesis

+1

私はこれを始める前にSketchFlowを見ていきます。 WPFは、Windowsフォームよりも見やすい技術である可能性があります。 (答えの代わりに私のコメントをここに残す) –

答えて

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で開発されているのを見て、私はあなたがずっと取引しているとは思わないでしょう。 –

関連する問題