如何在WPF inkCanvas中绘制具有PNG序列的行

时间:2014-03-20 21:34:48

标签: wpf draw drawimage

我试图制作一种方法,从PNG图像中透明地绘制一些箭头。 当我移动鼠标时,应用程序将沿着路径绘制png图。

这样做的方法是什么?

我想知道的另一种形式是创建一个多边形形状。当我进入鼠标按下事件时,我尝试绘制形状(三角形)。

    void MainWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        double posX = e.GetPosition(null).X;
        double posY = e.GetPosition(null).Y;

        double posX1 = posX - (posX / 4);
        double posY1 = posY - (posY / 4);

        double posX2 = posX + (posX / 4);
        double posY2 = posY;

        double posX3 = posX - (posX / 4);
        double posY3 = posY + (posY - posY / 3);


        Polygon p = new Polygon();
        p.Stroke = Brushes.Black;
        p.Fill = Brushes.LightBlue;
        p.StrokeThickness = 1;
        p.HorizontalAlignment = HorizontalAlignment.Left;
        p.VerticalAlignment = VerticalAlignment.Center;
        p.Points = new PointCollection() { new Point(posX1, posY1), new Point(posX2, posY2), new Point(posX3, posY3), new Point(posX1, posY1) };
        MyCanvas.Children.Add(p);
    }

但仍然无法在鼠标(x,y)位置正确点击并绘制三角形。

http://i.stack.imgur.com/bM2i4.png

1 个答案:

答案 0 :(得分:0)

这是一个简单的例子。

<强> XAML

  <Canvas x:Name='DrawingCanvas'
          Margin='30'
          Background='LightBlue'
          MouseDown='Canvas_MouseDown'
          MouseMove='Canvas_MouseMove'
          MouseUp='Canvas_MouseUp'>
    <Rectangle>
      <Rectangle.Fill>
        <ImageBrush ImageSource='Arrow.png'  x:Name='ArrowBrush'/>
      </Rectangle.Fill>
    </Rectangle>
  </Canvas>

<强> CODE

 public partial class MainWindow : Window {
    public MainWindow() {
      InitializeComponent();
    }
    private bool _isDrawing = false;
    private Point _lastPosition;
    const double MIN_MOVEMENT = 60;
    private void Canvas_MouseDown(object sender, MouseButtonEventArgs e) {
      _isDrawing = true;
      _lastPosition = e.GetPosition(DrawingCanvas);
      // add the first arrow
      AddArrow(_lastPosition);
    }

    private void Canvas_MouseMove(object sender, MouseEventArgs e) {
      if (!_isDrawing)
      {
        return;
      }
      var currentPosition = e.GetPosition(DrawingCanvas);
      // draw a new image if mouse has traveled minimum distance
      if (Math.Abs((currentPosition.X - _lastPosition.X)) > MIN_MOVEMENT ||
          Math.Abs((currentPosition.Y - _lastPosition.Y)) > MIN_MOVEMENT)
      {
        AddArrow(currentPosition);
        _lastPosition = e.GetPosition(DrawingCanvas);
      }


    }

    private void AddArrow(Point currentPosition) {
      var rect = new Rectangle();
      rect.Width = 120;
      rect.Height = 120;
      rect.Fill = ArrowBrush;

      Canvas.SetTop(rect, currentPosition.Y);
      Canvas.SetLeft(rect, currentPosition.X);
      DrawingCanvas.Children.Add(rect);

    }

    private void Canvas_MouseUp(object sender, MouseButtonEventArgs e) {
      _isDrawing = true;
    }
  }

<强>截图 enter image description here