2014-07-22 46 views
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); 

我怎么能合并符合图像同时保存两者兼而有之?

回答

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

+0

作品完美..!谢谢 – Norick

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

它吸引了来自TOPE一行留给图像的右下角。

+0

绘制线条并不是问题,而是将线条与图像合并 – Norick

+0

@Norick请注意,此处介绍的解决方案基于WinForms API,而不是WPF。虽然您可以在WPF应用程序中执行此操作,但不建议这样做。 – Clemens

相关问题