如何将图像与线合并并将其保存在文件中?

时间:2014-07-22 05:53:07

标签: c# wpf image

我想将图像与叠加层一起保存,在我的例子中,它是整个图像的简单线条。当我保存这个图像时,它不包括我的行,因此我的问题是如何将这一行与我的图像合并以便将BOTH保存在一个文件中?!

这是我保存图片的代码:

// Save image
var encoder1 = new PngBitmapEncoder();
encoder1.Frames.Add(BitmapFrame.Create((BitmapSource)image.Source));

using (FileStream stream = new FileStream("test.png", FileMode.Create))
encoder1.Save(stream);

该行添加如下:

grid2.Children.Add(myLine);   

如何将线与图像合并以一次保存?

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

using (Stream s = File.OpenRead("myJpeg.jpg"))
{
    Image sourceImage = Image.FromStream(s);

    Graphics canvas = Graphics.FromImage(sourceImage);
    canvas.DrawLine(new Pen(Color.Black, 5), 0, 0, sourceImage.Width, sourceImage.Height);
    sourceImage.Save("test.jpg");
}

它从图像的左侧到右下角绘制一条线。

答案 1 :(得分:0)

在WPF中有多种方法可以做到这一点。在这里,您似乎只想将grid2面板的内容绘制到位图中(当然假设Image控件也是grid2的子元素)。

这可以通过RenderTargetBitmap轻松完成,如下所示:

var bitmap = new RenderTargetBitmap(
    (int)grid2.ActualWidth, (int)grid2.ActualHeight, 96, 96, PixelFormats.Default);
bitmap.Render(grid2);

var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));

using (var stream = new FileStream("test.png", FileMode.Create))
{
    encoder.Save(stream);
}

请注意,此解决方案可让您在图像顶部绘制任何类型的UI元素 - 而不仅仅是一行 - 并将结果保存到文件中。

如果您只是想加载图像文件,在顶部绘制一些简单的形状并将其保存回文件,您可以考虑使用WritabelBitmapEx代替。