0

我正在尝试编写一个用户可以通过按住并移动鼠标来绘制的表单。因此,我订阅了 MouseMove 事件并使用给定的 Point 在该点绘制一个像素。

不幸的是,我移动鼠标的速度越快,消息队列跳过和丢弃的点就越多,所以我最终得到的不是笔画的线,而是一系列点。

我需要手动填写每个点之间的空白吗?如果是这样,什么是计算两点之间的点列表的好算法。

4

4 回答 4

1

您可以在用户使用 Graphics.DrawLine 绘制和显示这些点时将点保存为线段。如果您确实想要实际点,则必须决定是要直线还是通过它们插入圆弧(圆弧)。

对于直线,有http://en.wikipedia.org/wiki/Bresenham's_line_algorithm - 弧线有点复杂:)

于 2011-08-22T14:50:18.690 回答
0

你应该简单地从你看到鼠标的最后一点到当前位置画一条线。

于 2011-08-22T14:47:57.903 回答
0

以这种方式绘制的正常程序是使用线,而不是点。伪代码如下:

on mousemove
{
    draw line from lastCoord to current coordinate
    store current coordinate in lastCoord
}

on mousedown
{
    store current coordinate in lastCoord
}
于 2011-08-22T14:48:46.517 回答
0

您应该只使用两个点:用户按下鼠标按钮 ( MouseDown) 的点和他释放鼠标按钮 ( ) 的点MouseUp......然后在这两点之间画一条线。

例如用Graphics.DrawLine方法...

于 2011-08-22T14:48:52.710 回答