快速移动鼠标不会像在缓慢移动时那样在红色中创建点

时间:2013-12-07 23:32:18

标签: c# winforms

在form1的顶部,我做了:

private int pixelscounter;
private int counter;
private float xFactor, yFactor;
List<PointF> points = new List<PointF>();
double increment = 1.25;
double factor = 1.0;
Image img;
private Point startingPoint = Point.Empty;
private Point movingPoint = Point.Empty;
private bool panning = false;
GraphicsPath gp = new GraphicsPath();
GraphicsPath redgp = new GraphicsPath();

然后在pictureBox1移动事件我做了:

if (checkBox2.Checked && e.Button == MouseButtons.Left)
{
    gp.AddLine(e.X * xFactor, e.Y * yFactor, e.X * xFactor, e.Y * yFactor);
    pixelscounter += 1;
    if (pixelscounter == 10)
    {
        redgp.AddEllipse((e.X) * xFactor, (e.Y) * yFactor, 3f, 3f);
        pixelscounter = 0;
    }
    p = e.Location;
    pictureBox2.Invalidate();
}

和pictureBox2绘制事件:

if (checkBox2.Checked)
{
    using (Pen pp = new Pen(Color.Green, 2f))
    {
        pp.StartCap = pp.EndCap = LineCap.Round;
        pp.LineJoin = LineJoin.Round;
        e.Graphics.DrawPath(pp, gp);
    }
    using (Pen pp = new Pen(Color.Red, 2f))
    {
        pp.StartCap = pp.EndCap = LineCap.Round;
        pp.LineJoin = LineJoin.Round;
        e.Graphics.DrawPath(pp, redgp);
    }
}

我做的是当我单击鼠标左键按下而不离开它然后在pictureBox1周围拖动鼠标,它在pictureBox2中以绿色绘制一条线,并且每10个位置(像素)自动创建一个红点。

问题是当我快速移动鼠标或快速移动时,红点不在10个位置(像素)的相同距离内如果我移动鼠标非常慢,如果我的红点太接近彼此了似乎或多或少地移动鼠标似乎彼此之间的点距离是好的,如果我快速/非常快地移动鼠标,则每个红点之间的距离大于10像素。

如何修复/解决此鼠标移动问题?

2 个答案:

答案 0 :(得分:1)

您可以计算开始位置和当前位置之间的差异。然后在中间每10个像素绘制一个点,并在您添加的最后一个点上设置新的起始位置。

此答案有助于计算此路径:https://stackoverflow.com/a/12550458/1277156

答案 1 :(得分:0)

鼠标仅经常向操作系统报告其位置。通常,该速率大约为每秒100次。这意味着例如在1/10秒内,鼠标将报告其位置10次。因此,如果您快速移动鼠标,在1/10秒内说120像素,报告将大约相隔12个像素。

某些鼠标驱动程序可让您设置报告率。花式老鼠每秒上升1000次,但通常你不能超过每秒200左右。不幸的是,我不知道任何API可以让您轻松地从程序中更改此设置,但如果您的目标是一个特定的鼠标,则可能有机会。