我正在创建一个图像分割程序,其中一小部分是能够加载图像,用钢笔工具绘制它然后保存它。
目前,我的程序可以加载图像并将其显示在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对象,或者如果可能的话。
我想在这里重新发明轮子吗?这似乎是一个非常微不足道的问题,但我无法找到我正在寻找的东西。我认为可能有用的另一种方法是使用墨水画布并将图像加载到其中,但我也找不到这样做的方法。
提前致谢。
答案 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;