最近遇到怎样保存Canvas里面的内容,闲来无事,自己做个练习,来实践一下。下面贴出效果图和代码
下面为核心代码:
//创建FileStream
FileStream fs = new FileStream(path, FileMode.Create);
RenderTargetBitmap bmp = new RenderTargetBitmap((int)ic.ActualWidth,
(int)ic.ActualHeight, 1 / 96, 1 / 96, PixelFormats.Pbgra32);
bmp.Render(ic);
BitmapEncoder encoder = new TiffBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
encoder.Save(fs);
fs.Close();
前台代码:
<Window x:Class="SavePanel.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="保存Canvas" Width="525" Height="350">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="45" />
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="Black" BorderThickness="3">
<InkCanvas Name="ic" />
</Border>
<Button Name="btnSave" Grid.Row="1" Width="75" Height="25" Margin="10"
HorizontalAlignment="Right" Click="btnSave_Click" Content="保存" />
</Grid>
</Window>
后台代码:
/// <summary>
/// 保存
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSave_Click(object sender, RoutedEventArgs e)
{
SaveFileDialog save = new SaveFileDialog();
save.Filter = "BMP|*.bmp|PNG|*.png|JPG|*.jpg";
if (save.ShowDialog().Value)
{
if (SaveImg(save.FileName))
{
MessageBox.Show("保存成功!");
}
}
}
private bool SaveImg(string path)
{
try
{
FileStream fs = new FileStream(path, FileMode.Create);
RenderTargetBitmap bmp = new RenderTargetBitmap((int)ic.ActualWidth,
(int)ic.ActualHeight, 1 / 96, 1 / 96, PixelFormats.Pbgra32);
bmp.Render(ic);
BitmapEncoder encoder = new TiffBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
encoder.Save(fs);
fs.Close();
return true;
}
catch (Exception)
{
return false;
}
}