3

我目前正在尝试在图片框中显示的图像上绘制一些东西。我正在为鼠标活动使用事件处理程序:onMouseUp、onMouseMove 和 onMouseDown。

private void onMouseDown(object sender, MouseEventArgs e)
    {
        mouseDown = true;
    }

    private void onMouseMove(object sender, MouseEventArgs e)
    {
        if (mouseDown)
        {
            using (Graphics g = pictureBox.CreateGraphics())
            {
                g.FillEllipse(Brushes.Black, e.X - size, e.Y - size, size * 2, size * 2);
            }
        }
    }
private void onMouseUp(object sender, MouseEventArgs e)
    {
        mouseDown = false;

        using (Graphics g = pictureBox.CreateGraphics())
        {
            g.FillEllipse(Brushes.Black, e.X - size, e.Y - size, size * 2, size * 2); //just in case user just clicks instead of move the mouse
        }
    }

我正在尝试模拟当鼠标在图片框上移动时绘制指定大小(半径)的圆圈的画笔工具。它在缓慢移动时效果很好,但当移动速度更快时,pictureBox 似乎只捕捉到一些事件,并且很多圆圈被跳过而不被绘制。尤其是半径很小的时候。

我该怎么做才能让它更快更顺畅?

4

1 回答 1

4

移动鼠标时,您不会MouseMove为鼠标指针经过的每个像素获得一个事件。您将以相当一致的时间间隔获得它们,因此鼠标移动得越快,您获得的点就越远。这个特殊的细节你无能为力。

您需要做的是存储收到的最后一个点的位置,并在最后一个点和新点之间的每个点绘制一个椭圆。

于 2013-02-12T12:02:39.773 回答