C# 如何使我的图形线在Winforms picturebox上正确匹配?

C# 如何使我的图形线在Winforms picturebox上正确匹配?,c#,winforms,line,picturebox,C#,Winforms,Line,Picturebox,我正在尝试创建一个程序,在这个程序中,图像被处理,我认为细节与这个问题无关,然后用户可以通过在任何需要的地方画线来修改/微调图像。为了精确起见,我希望线条从鼠标单击的一点移动到下一点。我发现了一个以前关于堆栈溢出的问题,它似乎为我提供了一个很好的模板;这是我的密码: private void imgPicture_MouseDown(object sender, MouseEventArgs e) { if (draw) { if (p1.X == 0)

我正在尝试创建一个程序,在这个程序中,图像被处理,我认为细节与这个问题无关,然后用户可以通过在任何需要的地方画线来修改/微调图像。为了精确起见,我希望线条从鼠标单击的一点移动到下一点。我发现了一个以前关于堆栈溢出的问题,它似乎为我提供了一个很好的模板;这是我的密码:

private void imgPicture_MouseDown(object sender, MouseEventArgs e) {
        if (draw) {
            if (p1.X == 0) {
                p1.X = e.X;
                p1.Y = e.Y;
            }
            else {
                p2.X = e.X;
                p2.Y = e.Y;

                p1List.Add(p1);
                p2List.Add(p2);

                imgPicture.Invalidate();
                p1.X = 0;
            }
            Graphics pictureGraphic = Graphics.FromImage(imgPicture.Image);
            using (var p = new Pen(Color.Black, 4)) {
                for (int x = 0; x < p1List.Count; x++) {
                    pictureGraphic.DrawLine(p, p1List[x], p2List[x]);
                }
            }
        }
    }
问题是,我的点击注册的位置太远了。这是我节目的剪报;蓝线是我试图创建线的地方,红线是它实际出现的地方。

看起来我离屏幕左上角越远,拍摄的距离就越远

另外,当我提问时,有人知道我如何永久地处理所有创建的绘制线吗?这样我就可以点击一个按钮,所有的线都消失了


谢谢你的帮助!Stackoverflow是救命稻草

多亏了赛斯和汉斯·帕桑,现在一切都很顺利!正如Hans指出的,我在绘图功能期间将SizeMode属性设置为Normal,然后在完成后将其设置回zoom,效果非常好


对于清理,我所要做的就是在我的两个指针列表上使用Clear函数,在我的图形上使用Dispose函数。

我确信这是一个重复的函数,但我现在找不到它,这可能是因为缩放以及您试图从mouseXY到pixelXY位置进行1:1映射。至于你的第二个问题,你需要保留原始图像以恢复到原始图像,或者保留一个线条列表并从列表中直接绘制线条,而不是从创建线条时开始将PictureBox.SizeMode属性设置为正常,很有可能现在可以正常工作。你们真是太棒了!