【问题标题】:InkCanvas to BitMapInkCanvas 到位图
【发布时间】:2013-12-16 23:32:53
【问题描述】:

我在将画布保存到 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) 到画布的大小相等。我做错了什么?

【问题讨论】:

    标签: c# wpf bitmap save inkcanvas


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我认为 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>
      

      【讨论】:

        【解决方案3】:

        根据我的阅读,位图无法处理透明背景。因此,当创建位图时,它会将像素保留为黑色。只需将您的墨水画布更改为具有白色背景(或您想要的任何颜色)。看看这个:WPF - Black Background surrounding saved canvas as jpeg 您也可以尝试去掉负边距,在创建图像时只使用整个墨水画布。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多