如何将一张图片与一条线合并并保存到一个文件中?

3
我希望将一个与图像重叠的覆盖层(在我这里是一条横跨整个图像的简单线条)一起保存为图像。当我保存这张图片时,它不包括我的线条,因此我的问题是如何将这条线与我的图像合并以将两者保存在一个文件中?!
以下是保存图像的代码:
// 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个回答

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

它在图片的左上角和右下角之间画了一条线。


画一条线不是问题,但将该线与图像合并才是难点。 - Norick
@Norick 请注意,这里提供的解决方案基于WinForms API,而不是WPF。虽然您可以在WPF应用程序中执行此操作,但不建议这样做。 - Clemens

1
在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接