2017-06-08 4 views
2

私はC#でペイントアプリケーションを作っています。ユーザーがペイントパネルをクリックしたときにポイントをマークし、マウスが新しい位置に移動したとき;私はとても基本的なC#を学んでいます。ペンをサイズアップするまで、今はすべてのことがうまくいきます。そのとき、ラインが超奇妙に見えるようになりますか?誰かが線を正常に見せるための解決策を知っていますか?など、あなたのごLineCapsを変更してみてください(とあなたのペンを処分、createGraphicsのを使用してに関する私のコメントのほかに良いラインを作るには?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using Microsoft.VisualBasic; 
using System.Drawing.Drawing2D; 

namespace paintApplication 
{ 

    public partial class frmPaintApp : Form 
    { 
     /// <summary> 
     /// variables 
     /// </summary> 
     bool shouldPaint = false; 
     Point prePoint; 
     float penSize = 1; 
     Graphics g; 

     ColorDialog cd = new ColorDialog(); 

     public frmPaintApp() 
     { 
      InitializeComponent(); 
      g = pnlPaintPanel.CreateGraphics(); 
      g.SmoothingMode = SmoothingMode.AntiAlias; 
     } 

     private void msPensize_Click(object sender, EventArgs e) 
     { 

      if (float.TryParse(msTxtchoosesize.Text , out penSize)) 
      { 
       msTxtchoosesize.Text = ""; 
      } 
     } 

     private void pnlPaintPanel_MouseDown(object sender, MouseEventArgs e) 
     { 
      shouldPaint = true; 
      prePoint = new Point(e.X, e.Y); 
     } 

     private void pnlPaintPanel_MouseUp(object sender, MouseEventArgs e) 
     { 
      shouldPaint = false; 
     } 

     private void pnlPaintPanel_MouseMove(object sender, MouseEventArgs e) 
     { 
      Pen p = new Pen(cd.Color, penSize); 


      if (shouldPaint == true) 
      { 
       g.DrawLine(p, prePoint, new Point(e.X, e.Y)); 
      } 

      prePoint = new Point(e.X, e.Y); 

     } 

     private void msChoosecolor_Click(object sender, EventArgs e) 
     { 
      cd.ShowDialog(); 
     } 

     private void frmPaintApp_ResizeEnd(object sender, EventArgs e) 
     { 
      g = pnlPaintPanel.CreateGraphics(); 
      g.SmoothingMode = SmoothingMode.AntiAlias; 
     } 

     private void msClear_Click(object sender, EventArgs e) 
     { 
      g.Clear(pnlPaintPanel.BackColor); 

     } 

     private void msExit_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
     } 

     private void pnlPaintPanel_Paint(object sender, PaintEventArgs e) 
     { 

     } 
    } 
} 
+2

行の代わりに円を描くと役立ちます。 – Carcigenicate

+2

そのグラフィックオブジェクトは決して保管しないでください。一時的です。 CreateGraphicsを使用しないでください。パネルのペイントイベントを使用して、すべての線を描画するか、ビットマップを使用して、ペイントイベントでそのイベントを表示します。あなたは45のペンサイズを使用しようとしていますか? – LarsTech

+1

@Carcigenicate合意。ペイントプログラムでは、円のサイズを「ペン」のサイズにバインドすることができます。サークルを描画する可変サイズの「ペン」の塗りつぶしは、必要なものを正確に行う必要があります。 –

答えて

1

:ここ

Weird Lines

は、私はWindowsフォームアプリケーションを使用しています、私のコードですメモリが漏れている):

using (Pen p = new Pen(Color.Black, penSize)) { 
    p.StartCap = LineCap.Round; 
    p.EndCap = LineCap.Round; 
    if (shouldPaint) { 
    g.DrawLine(p, prePoint, new Point(e.X, e.Y)); 
    } 
} 
+0

これは完全に機能しました!ありがとう:http://imgur.com/a/eNFSw –

関連する問題