【发布时间】:2015-04-23 22:00:50
【问题描述】:
我正在创建一个截图制作器/上传器,一切都很好,但现在我想集成一些东西,比如油漆。所以首先我要创建铅笔功能。但是开始出现我可以绘制的问题:D 但不是我的鼠标位置。他占据了我的光标以外的位置?
所以问题是: 锄头在放大的图片框上获取鼠标位置?
我的代码:
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (draw && pencil)
{
Graphics panel = Graphics.FromImage(ScreenShot);
Pen pen = new Pen(Color.Black, 14);
pen.EndCap = LineCap.Round;
pen.StartCap = LineCap.Round;
panel.DrawLine(pen, pX, pY, e.X, e.Y);
pictureBox1.CreateGraphics().DrawImage(ScreenShot, pictureBox1.Width, pictureBox1.Height);
pictureBox1.Invalidate();
}
Point p = pictureBox1.PointToClient(Cursor.Position);
pX = p.X;
pY = p.Y;
}
【问题讨论】:
-
您需要(至少)做以下两件事之一:a)计算从缩放世界到未缩放世界的点和/或 b)通过缩放图形对象以缩放模式绘制绘制。如果你学习this post,你可以在工作中看到两者。 - 对于 a) 你还需要缩放笔的宽度! (尽可能对所有数字使用浮点数!!)。顺便说一句:无需使用 PointToClient - 使用 e.Location 等参数并将它们除以缩放因子!
-
并且不要在MouseMove中绘制,在Paint事件中绘制。在 MouseMove 中,您存储在绘制事件中绘制的点的坐标等。并且在您知道自己在做什么之前不要创建 Graphics 对象,使用 Paint e.Graphics 参数中的那个并且不要命名 Graphics 对象面板,您在逗大家,很可能是从您自己开始
-
收集点然后立即在 scalePoint 函数中转换它们并不是任何额外的工作。进入 GDI+ 中的图形模型确实有一定的学习曲线,但你不需要担心任何事情..
-
谢谢奇怪的问题,但你可能有Skype。这就是我正在做的:playscripters.nl/topic/46 我正忙于另一个更新
-
您的问题解决了吗?
标签: c# bitmap position mouse picturebox