C# InkCanvas到位图

C# InkCanvas到位图,c#,wpf,bitmap,save,inkcanvas,C#,Wpf,Bitmap,Save,Inkcanvas,我在将画布保存到BMP文件(或任何其他类型)时遇到问题 我正试图这样保存我的InkCanvas: int margin = (int)canvas.Margin.Left; int width = (int)canvas.ActualWidth -margin; int height = (int)canvas.ActualHeight -margin; //render ink to bitmap RenderTargetBitmap renderBitmap = new RenderTarg

我在将画布保存到BMP文件(或任何其他类型)时遇到问题

我正试图这样保存我的InkCanvas:

int margin = (int)canvas.Margin.Left;
int width = (int)canvas.ActualWidth -margin;
int height = (int)canvas.ActualHeight -margin;
//render ink to bitmap
RenderTargetBitmap renderBitmap =
new RenderTargetBitmap(width, height, 96d, 96d, PixelFormats.Default);
renderBitmap.Render(canvas);
//save the ink to a memory stream
BitmapEncoder encoder;
encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
encoder.Save(myStream);
但我总是得到一个从左到上都有黑色边框的图像,从窗口的点(0,0)到画布的大小相等。我做错了什么?

您需要将其放入单独的容器中(即,放入
网格中)。

我遇到了类似的问题,您的边距似乎影响了图像的渲染

RenderTargetBitmap rtb = new RenderTargetBitmap((int)inkCanvas.ActualWidth, (int)inkCanvas.ActualHeight, 96, 96, System.Windows.Media.PixelFormats.Default);
我假定canvas是InkCanvas的名称,因此为了避免黑色边框,您需要做的就是修改WPF框架,并使用画布设置边距,而不是使用InkCanvas:

<Grid Height="340" Width="445">
   <Canvas Background="Transparent" Margin="10,10,0,0">
      <InkCanvas Name="canvas" Height="320" Width="425"/>
   </Canvas>
</Grid>

据我所知,位图无法处理透明背景。因此,创建位图时,它会将像素保留为黑色。只需将您的墨水画布更改为白色背景(或任何您想要的颜色)。看看这个: 此外,您可能希望尝试去除负边距,在创建图像时仅使用整个墨水画布

RenderTargetBitmap rtb = new RenderTargetBitmap((int)inkCanvas.ActualWidth, (int)inkCanvas.ActualHeight, 96, 96, System.Windows.Media.PixelFormats.Default);