2

我在将画布保存到 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) 到画布的大小相等。我做错了什么? 在此处输入图像描述 在此处输入图像描述

4

3 回答 3

1

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

于 2014-02-07T18:02:39.660 回答
0

我遇到了类似的问题,看起来您的边距正在影响图像的渲染。

我认为 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>
于 2017-06-16T10:36:40.283 回答
0

从我读过的内容来看,位图无法处理透明背景。因此,当创建位图时,它会将像素保留为黑色。只需将您的墨水画布更改为具有白色背景(或您想要的任何颜色)。检查一下:WPF - 黑色背景将已保存的画布周围保存为 jpeg ,您可能还想尝试摆脱负边距,并在创建图像时只使用整个墨水画布。

RenderTargetBitmap rtb = new RenderTargetBitmap((int)inkCanvas.ActualWidth, (int)inkCanvas.ActualHeight, 96, 96, System.Windows.Media.PixelFormats.Default);
于 2020-09-16T14:26:08.690 回答