Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/WPF-加载图像,在其上自由绘制,保存图像_C#_Wpf_Image_Mouseevent_Draw - Fatal编程技术网

C#/WPF-加载图像,在其上自由绘制,保存图像

C#/WPF-加载图像,在其上自由绘制,保存图像,c#,wpf,image,mouseevent,draw,C#,Wpf,Image,Mouseevent,Draw,我正在创建一个图像分割程序,它的一小部分是能够加载一个图像,用钢笔工具画出来,然后保存它 目前,我的程序可以加载图像并在WPF中的图像对象中显示它 我试着添加一些鼠标事件,就像这样 Graphics g; Pen pen = new System.Drawing.Pen(Color.Red, 1); bool drawing = false; System.Windows.Point previousPoint; private void mainIma

我正在创建一个图像分割程序,它的一小部分是能够加载一个图像,用钢笔工具画出来,然后保存它

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

我试着添加一些鼠标事件,就像这样

    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);

    }
这里的问题是图形没有初始化,我不知道如何对图像对象进行初始化,或者这是否可能

我是想在这里重新发明轮子吗?这似乎是一个很小的问题,但我找不到我要找的东西。另一种我认为可行的方法是使用墨水画布并将图像加载到其中,但我也找不到这样做的方法


提前感谢。

您可能会发现直接通过WPF对象,特别是通过
画布,而不是尝试使用
图形
对象并通过GDI进行渲染要容易得多:

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

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