[![在此处输入图像说明] [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;
}
答案 0 :(得分:0)
为此,您需要确保PB不会缩放或拉伸(甚至居中)图像。
设置SizeMode = Normal
!
如果您需要不同的SizeMode
,则需要执行小数学来计算image.Size
和PB.ClientSize
的图像坐标。 / p>
计算很简单,但每个SizeMode
:
对于Center
,您只需要为其中一个坐标添加偏移量。
对于Zoom
您需要计算缩放系数并将其乘以两个坐标。
对于Stretch
,您需要独立计算两个维度的缩放系数,并将其乘以各自的坐标。
顺便说一下:通过单行绘制线条的方式仅适用于简单的钢笔。一旦你使用半透明笔或花式线帽,你会在交叉点看到文物。如果您需要避免这些,请收集点并在DrawLines
事件中使用Paint
(pl!);然后,在MouseUp
将它们绘制到位图中,然后清除点列表..