在光标的不同位置绘制线条

时间:2015-09-22 06:22:58

标签: c# cursor

[![在此处输入图像说明] [10]] [10]

我正在图片框中画一条线并将此图片保存在一个文件夹(我的电脑)中。当我尝试绘制线条时,它会在不同的位置而不是光标位置绘制线条。

代码---

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (paint)
        {
            Pen ppen = new Pen(Color.Black,1);

            Bitmap bmp = new Bitmap(pictureBox1.Image);
            try
            {
                Gr =Graphics.FromImage(bmp);

                Gr.DrawLine(ppen,e.X,e.Y,Xold, Yold);

                pictureBox1.Image = bmp;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString(), "Error", 
                   MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        Xold = e.X;
        Yold = e.Y;
    }

1 个答案:

答案 0 :(得分:0)

为此,您需要确保PB不会缩放拉伸(甚至居中)图像。

设置SizeMode = Normal

如果您需要不同的SizeMode,则需要执行数学来计算image.SizePB.ClientSize的图像坐标。 / p>

计算很简单,但每个SizeMode

会有所不同
  • 对于Center,您只需要为其中一个坐标添加偏移量。

  • 对于Zoom您需要计算缩放系数并将其乘以两个坐标。

  • 对于Stretch,您需要独立计算两个维度的缩放系数,并将其乘以各自的坐标。

顺便说一下:通过单行绘制线条的方式仅适用于简单的钢笔。一旦你使用半透明笔或花式线帽,你会在交叉点看到文物。如果您需要避免这些,请收集点并在DrawLines事件中使用Paint(pl!);然后,在MouseUp将它们绘制到位图中,然后清除点列表..