InkCanvas to BitMap

2019-06-05 06:19发布

I have a problem with saving canvas to BMP file (or any other type).

I'm trying to save my InkCanvas like this:

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

But i always got an image with a black borders from left and top, equal size from point (0,0) of my window to my canvas. What i do wrong? enter image description here enter image description here

2条回答
一夜七次
2楼-- · 2019-06-05 06:21

I had a similar problem and it looks like your margins are affecting the rendering of the image.

I presume canvas is the name of the InkCanvas, so to avoid the black borders - all you need to do is amend your WPF frames and use a canvas to set up your margins instead of using the InkCanvas:

<Grid Height="340" Width="445">
   <Canvas Background="Transparent" Margin="10,10,0,0">
      <InkCanvas Name="canvas" Height="320" Width="425"/>
   </Canvas>
</Grid>
查看更多
祖国的老花朵
3楼-- · 2019-06-05 06:26

You need to put it into a separate container (ie., into Grid).

查看更多
登录 后发表回答