WinForms C# - 自由绘制的正确方法?

Ale*_*ond 4 c# graphics winforms

我正在尝试重新创建类似于 Microsoft 的 Paint 应用程序的东西。我正在使用位图技术来渲染我的绘图,以使它们具有持久性。在 4 像素 x 4 像素时,它是不明显的,但是随着宽度的增加,它非常明显,尤其是当您弯曲时。我有一张图片可以向您展示它的外观和一些片段。

图片

        private void Form1_Load(object sender, EventArgs e)
    {
        //Initializing Graphics and Bitmap
        pnlMain.BackgroundImage = new Bitmap(pnlMain.Width, pnlMain.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
        Doodle = Graphics.FromImage(pnlMain.BackgroundImage);
        Doodle.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        Doodle.Clear(Color.White);
     }

private void pnlMain_MouseDown(object sender, MouseEventArgs e)
    {
        start = e.Location;
        if (cboDrawType.SelectedIndex == 0)
        {
        Painting = true;
        }

        private void pnlMain_MouseUp(object sender, MouseEventArgs e)
    {
        Painting = false;
    }

        private void pnlMain_MouseMove(object sender, MouseEventArgs e)
    {
      if (Painting == true && cboDrawType.SelectedIndex == 0)
        {
            end = e.Location;
            Doodle.DrawLine(ChosenPen, start, end);
            pnlMain.Refresh();
        }
      start = end;
    }

        private void nudSize_ValueChanged(object sender, EventArgs e)
    {
        ChosenPen.Width = Convert.ToUInt16(nudSize.Value);
    }
Run Code Online (Sandbox Code Playgroud)

注意:开始和结束是新的 Point() 变量成员。对不起,如果代码有点乱,我不得不粗暴地剪掉它。我正在使用钢笔,尽管它在图片中写着 Brush。涂鸦是我声明的图形

C.E*_*uis 5

您应该指定StartCap和EndCap属性:

pen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
pen.EndCap = System.Drawing.Drawing2D.LineCap.Round;
Run Code Online (Sandbox Code Playgroud)

默认为Flat,它将具有高笔宽的短线变成愚蠢的条纹。