2015-11-04 42 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