2015-11-04 67 views
2

我正试图为我的Paint项目实现刷牙功能。笔刷打印不连贯

我的想法是想飞我移动,然后按鼠标左键在画布上按钮,我会添加一个椭圆自由刷(如MSPAINT)

一切都很好,直到我移动鼠标速度会更快。 enter image description here >>画笔打印分离。

任何人都可以向我解释并给我一些提示来解决这个问题吗?

这里是我的代码:

Point _startPoint, _endPoint; 
    private void MyCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
        _startPoint = e.GetPosition(MyCanvas); 
        Ellipse MyBrush_Ellipse = new Ellipse(); 
        MyBrushing.CreateBrush(_cl1, _cl2, ref MyBrush_Ellipse, Mybrush_type); 

        Canvas.SetTop(MyBrush_Ellipse, _startPoint.Y); 
        Canvas.SetLeft(MyBrush_Ellipse, _startPoint.X); 
    } 

    private void MyCanvas_MouseMove(object sender, MouseEventArgs e) 
    { 
      _endPoint = e.GetPosition(MyCanvas); 
      if (e.LeftButton == MouseButtonState.Pressed) 
      { 
         Ellipse MyBrush_Ellipse = new Ellipse(); 
         MyBrushing.CreateBrush(_cl1, _cl2, ref MyBrush_Ellipse, Mybrush_type); 

         Canvas.SetTop(MyBrush_Ellipse, _endPoint.Y); 
         Canvas.SetLeft(MyBrush_Ellipse, _endPoint.X); 

         MyCanvas.Children.Add(MyBrush_Ellipse); 
         MyCanvas.CaptureMouse(); 
         _myUndoRedo.PushToStackForBrush(MyBrush_Ellipse); 
      } 
    } 

    private void MyCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
       MyCanvas.ReleaseMouseCapture(); 
    } 
+0

如果将类似于Mybrush_type的'MyCanvas_MouseMove'事件移出椭圆创建,是否有任何改变? –

+0

除了添加单独的椭圆,您可能希望添加单个多段线,然后在鼠标移动中为其“点”集合添加一个新点。 – Clemens

+0

我试过使用Polyline作为@ Clemens的评论。但是当折线变长时,画布变得滞后。 – Duy

回答

1

鼠标没有在屏幕上不断移动。当从A快速移动到B时,鼠标实际上并不需要遍历屏幕的每个部分。

要解决您的问题,请绘制一条线,而不是在鼠标的位置绘制一个椭圆。因此您必须存储鼠标之前的位置。运动后,从存储的最后一个已知点画出一条直线到实际点。

+0

如果我画一条线,它只是一条直线,但画笔不是一条直线。因为当我刷画时,我想画出我想要的一切。这不是alwalys的直线。 – Duy

+0

我明白了。 Afaik无法增加发送的鼠标移动消息的数量。解决方法可能是使用样条线。 – blueprint