我正在尝试为我的Paint项目实现Brushing功能。
我的想法是每当我移动并在画布上按鼠标左键时,我会在自由笔刷上添加一个椭圆(如MSPaint)
一切都很好,直到我快速移动鼠标。 >>画笔打印分开。
有人可以向我解释并给我一些提示来解决这个问题吗?
这是我的代码:
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 :(得分:1)
鼠标不会在屏幕上不断移动。当从A移动到B更快时,鼠标实际上不会在屏幕的每个部分之间移动。
要解决您的问题,请绘制一条线,而不是在鼠标位置绘制一个椭圆。因此,您必须存储鼠标之前的点。移动后,从存储的最后一个已知点到实际点绘制一条线。