C#/ WPF - 加载图像,自由形式绘制,保存图像

时间:2014-02-04 11:38:58

标签: c# wpf image mouseevent draw

我正在创建一个图像分割程序,其中一小部分是能够加载图像,用钢笔工具绘制它然后保存它。

目前,我的程序可以加载图像并将其显示在WPF中的Image对象中。

我尝试添加一些像这样的鼠标事件;

    Graphics g;
    Pen pen = new System.Drawing.Pen(Color.Red, 1);
    bool drawing = false;
    System.Windows.Point previousPoint;

    private void mainImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        drawing = true;
        previousPoint = e.GetPosition(mainImage);
    }

    private void mainImage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        drawing = false;
    }

    private void mainImage_MouseMove(object sender, MouseEventArgs e)
    {
        if (!drawing) { return; }

        if (e.GetPosition(mainImage).Equals(previousPoint)) { return; };

        g.DrawLine(pen, (float)e.GetPosition(mainImage).X, (float)e.GetPosition(mainImage).Y, (float)previousPoint.X,
            (float)previousPoint.Y);

    }

这里的问题是图形没有被初始化,我不知道如何使用Image对象,或者如果可能的话。

我想在这里重新发明轮子吗?这似乎是一个非常微不足道的问题,但我无法找到我正在寻找的东西。我认为可能有用的另一种方法是使用墨水画布并将图像加载到其中,但我也找不到这样做的方法。

提前致谢。

1 个答案:

答案 0 :(得分:1)

不是尝试使用Graphics对象并通过GDI渲染,您可能会发现直接通过WPF对象更轻松地完成所有操作,特别是通过Canvas

Drawing on a canvas with mouse events

Saving a WPF canvas as an image

基本上,您可以将图像渲染为画布的背景,然后按照上面的链接进行渲染和保存。

ImageBrush brush = new ImageBrush();
brush.ImageSource = new BitmapImage(new Uri(@"image.png", UriKind.Relative));
canvas.Background = brush;