wpf RenderTargetBitmap保存控件为图片时图片尺寸不对的问题

时间:2021-09-09 17:37:17

使用RenderTargetBitmap渲染图片时,必须在需要渲染的控件外层包含一个border控件,不然渲染的图片返回就会出现问题。

如下:

<Grid>

<Grid.RowDefinitions>
  <RowDefinition Height="35" />
  <RowDefinition />
</Grid.RowDefinitions>

  <Border Grid.Row="1">
  <!--由于要获取控件图片,所以这里在外层必须包含一个border,不然获取出来的图片就会有问题-->
    <Grid x:Name="GrdImage">

      <Image VerticalAlignment="Center" HorizontalAlignment="Center" Source="{Binding Image}" RenderTransformOrigin="0,0" >
    </Grid>
  </Border>

</Grid>

如果需要保存GrdImage空间为图片,那么就需要在GrdImage外面在包含一个border

保存图片代码如下:

 

private BitmapSource GetUiImage(FrameworkElement ui)
{
  RenderTargetBitmap bmp=new RenderTargetBitmap((int)ui.ActualWidth,(int)ui.ActualHeight,96d,96d, PixelFormats.Default);
  bmp.Render(ui);
  return bmp;
}

var bmp = GetUiImage(GrdImage);
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
FileStream fs = new FileStream("a.png", FileMode.Create);
encoder.Save(fs);
fs.Close();

以上问题解决参考如下:

https://blog.csdn.net/chartx/article/details/17560765