我想将图像与叠加层一起保存,在我的例子中,它是整个图像的简单线条。当我保存这个图像时,它不包括我的行,因此我的问题是如何将这一行与我的图像合并以便将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);
如何将线与图像合并以一次保存?
答案 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代替。