Как улучшить штрихи чернильницы WP8

Я использую чернила для рисования мазков. Но проблема в том, что при рисовании изогнутых линий он рисует неровные линии. Прямые линии не имеют проблем. Вот как я это сделал.. Я не знаю, где внести изменения, чтобы сделать линии более плавными.

    private void MyIP_MouseLeftButtonDown(object sender, MouseEventArgs e)
    {
        MyIP.CaptureMouse();

        DrawingAttributes att = new DrawingAttributes();
        att.Color = CB;
        att.Width = StrokeWidth;
        att.Height = StrokeWidth;


        if (bErase == true)
        {
            StylusPointCollection ErasePointCollection = new StylusPointCollection();
            ErasePointCollection.Add(e.StylusDevice.GetStylusPoints(MyIP));
            lastPoint = ErasePointCollection[ErasePointCollection.Count - 1];
            EraseStroke = new Stroke(ErasePointCollection);

            EraseStroke.DrawingAttributes = att;

        }
        else
        {
            StylusPointCollection MyStylusPointCollection = new StylusPointCollection();
            MyStylusPointCollection.Add(e.StylusDevice.GetStylusPoints(MyIP));
            NewStroke = new Stroke(MyStylusPointCollection);

            NewStroke.DrawingAttributes = att;

            MyIP.Strokes.Add(NewStroke);
        }
    }

    //StylusPoint objects are collected from the MouseEventArgs and added to MyStroke. 
    private void MyIP_MouseMove(object sender, MouseEventArgs e)
    {
        if (bErase == true)
        {
            //StylusPointCollection pointErasePoints = e.StylusDevice.GetStylusPoints(MyIP);
            //EraseStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(MyIP));

            //pointErasePoints.Insert(0, lastPoint);
            //StrokeCollection hitStrokes = MyIP.Strokes.HitTest(pointErasePoints);
            //if (hitStrokes.Count > 0)
            //{
            //    foreach (Stroke hitStroke in hitStrokes)
            //    {

            //        ////For each intersecting stroke, split the stroke into two while removing the intersecting points.
            //        ProcessPointErase(hitStroke, pointErasePoints);
            //    }
            //}
            //lastPoint = pointErasePoints[pointErasePoints.Count - 1];

            //STROKEERASE METHOD

            StylusPointCollection pointErasePoints = e.StylusDevice.GetStylusPoints(MyIP);
            StrokeCollection hitStrokes = MyIP.Strokes.HitTest(pointErasePoints);
            if (hitStrokes.Count > 0)
            {
                foreach (Stroke hitStroke in hitStrokes)
                {
                    MyIP.Strokes.Remove(hitStroke);
                    undoStack.Push(hitStroke);
                    undoStateBufferStack.Push(true);
                }
            }

        }

        if (NewStroke != null)
            NewStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(MyIP));

    }

    //MyStroke is completed
    private void MyIP_LostMouseCapture(object sender, MouseEventArgs e)
    {
        if (NewStroke != null)
        {
            undoStack.Push(NewStroke);
            undoStateBufferStack.Push(false);
        }

        EraseStroke = null;
        NewStroke = null;

    }

    //Set the Clip property of the inkpresenter so that the strokes
    //are contained within the boundary of the inkpresenter
    private void SetBoundary()
    {
        RectangleGeometry MyRectangleGeometry = new RectangleGeometry();
        MyRectangleGeometry.Rect = new Rect(0, 0, MyIP.ActualWidth, MyIP.ActualHeight);
        MyIP.Clip = MyRectangleGeometry;
    }

1 ответ

Вы можете найти образец исходного кода, описывающего докладчика по чернилам, в этой ссылке для скачивания

, Пожалуйста, найдите тег загрузки. Также он содержит множество других примеров, которые помогут вам изучить Windows Phone глубже.

Другие вопросы по тегам