gpt4 book ai didi

c# - 将 inkCanvas 中的图像保存为 png 或 jpeg 文件

转载 作者:行者123 更新时间:2023-11-30 15:20:06 25 4
gpt4 key购买 nike

这是我的 wpf 代码
<InkCanvas x:Name="inkCanvas" Margin="9,325,210,193" Background="Azure"></InkCanvas>
还有一个按钮按下按钮时,我想将绘制的图像保存到文件中。这是我的代码

  private void button1_Click(object sender, RoutedEventArgs e)
{
int margin = (int)inkCanvas.Margin.Left;
int width = (int)inkCanvas.ActualWidth - margin;
int height = (int)inkCanvas.ActualHeight - margin;
RenderTargetBitmap rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
rtb.Render(inkCanvas);


using (FileStream fs = new FileStream("path", FileMode.Create))
{
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
encoder.Save(fs);
}
}

但是,如果在油漆中打开,显示的图像是全黑的(来自资源管理器)或纯白。我该怎么做才能获得与绘制的图像完全一样的图像? ty.

最佳答案

问题是您正在尝试将矢量图形保存为位图,但那是不可能的,所以首先您需要做的是绘制矢量,然后您可以保存绘图

此类将在现有位图上绘制 Ink

public class InkImage
{
public static BitmapFrame MergeInk(StrokeCollection ink, BitmapSource background)
{
DrawingVisual drawingVisual = new DrawingVisual();
using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
drawingContext.DrawImage(background, new Rect(0, 0, background.Width, background.Height));

foreach (var item in ink)
{
item.Draw(drawingContext);
}
drawingContext.Close();
var bitmap = new RenderTargetBitmap((int)background.Width, (int)background.Height, background.DpiX, background.DpiY, PixelFormats.Pbgra32);
bitmap.Render(drawingVisual);
return BitmapFrame.Create(bitmap);
}
}
}

然后您可以使用 JPEG 或 PNG 编码器保存位图

关于c# - 将 inkCanvas 中的图像保存为 png 或 jpeg 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40913569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com