我正在尝试为人们可以同时观看的游戏设置实时共享地图。我遇到的问题是可以在图片框上随意画图。我找到了一篇文章(https://simpledevcode.wordpress.com/2014/02/06/drawing-by-mouse-on-a-picturebox-freehand-drawing/),该文章为此提供了代码,但是,由于地图图像太大而无法完全适合图片框,因此我在Windows窗体上使用“居中”模式。这引起的问题是MouseEventArgs返回鼠标相对于图片框上图像的位置,而不是实际鼠标所在的位置。因此,当它在图像上绘制时,它与实际鼠标的平移距离很远。
问题的动画处理: https://imgur.com/ASuebKM.gif
我当前的代码:
private Point _lastPoint = Point.Empty;
private bool _draw;
private void PbMap_MouseDown(object sender, MouseEventArgs e)
{
_lastPoint = e.Location;
_draw = true;
}
private void PbMap_MouseUp(object sender, MouseEventArgs e)
{
_lastPoint = Point.Empty;
_draw = false;
}
private void PbMap_MouseMove(object sender, MouseEventArgs e)
{
if (_draw && _lastPoint != null)
{
using (Graphics g = Graphics.FromImage(pbMap.Image))
{
g.DrawLine(new Pen(Color.White, 2), _lastPoint, e.Location);
g.SmoothingMode = SmoothingMode.AntiAlias;
}
pbMap.Invalidate();
_lastPoint = e.Location;
}
}
我如何翻译e.location提供的点,以便线条直接出现在光标下方?