在WPF中把Canvas保存为图片,文本文件,xps文件

由于wpf的UI使用xaml来表达的,所以我们们可利用这个优点,把WPF中的xaml元素另存为各样的文件,在很多时候我们都不须要这样的操作。把xaml保存为图片、字符串、XPS等等。这里我写了一些方法,以供大家参考.。

注意:以下保存操作前,一定要确保参数中的canvas有高和宽。

1.把canvas保存为文本文件

using System.IO;
public void Export(Uri path, Canvas surface)
{
      if (path == null) return;
      if (surface == null) return;
      string xaml = XamlWriter.Save(surface);
      File.WriteAllText(path.LocalPath, xaml);
}

2.把canvas保存为xps文件,xps命名空间在ReachFramework.dll中

   using System.IO.Packaging;
   using System.Windows.Xps;
   using System.Windows.Xps.Packaging;
   using System.IO;
   public void Export(Uri path, Canvas surface)
   {
       if (path == null) return;
    
       Transform transform = surface.LayoutTransform;
       surface.LayoutTransform = null;
    
       Size size = new Size(surface.Width, surface.Height);
       surface.Measure(size);
      surface.Arrange(new Rect(size));
   
      Package package = Package.Open(path.LocalPath, FileMode.Create);
      XpsDocument doc = new XpsDocument(package);
      XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc);
      writer.Write(surface);
      doc.Close();
      package.Close();
      surface.LayoutTransform = transform;
  }

3.把canvas保存为图片

public void ExportToPng(Uri path, Canvas surface)
   {
       if (path == null) return;
    
       Transform transform = surface.LayoutTransform;
       surface.LayoutTransform = null;
    
       Size size = new Size(surface.Width, surface.Height);
       surface.Measure(size);
       surface.Arrange(new Rect(size));
   
       RenderTargetBitmap renderBitmap =
       new RenderTargetBitmap(
       (int)size.Width,
       (int)size.Height,
       96d,
       96d,
       PixelFormats.Pbgra32);
       renderBitmap.Render(surface);
  
       using (FileStream outStream = new FileStream(path.LocalPath, FileMode.Create))
       {
           PngBitmapEncoder encoder = new PngBitmapEncoder();
           encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
           encoder.Save(outStream);
       }
           surface.LayoutTransform = transform;
   }


这几种都是WPF for win中使用的,希望能对你有所帮助。

链接:http://www.cnblogs.com/guozk/archive/2011/08/17/2142812.html

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要打印WPFCanvas控件内的内容,我们可以使用PrintDialog类来实现。首先,我们需要创建一个PrintDialog对象,并设置它的参数,如打印份数、纸张大小等。然后,我们可以使用PrintDialog的PrintVisual方法来指定要打印的内容,这里可以将Canvas控件传递给该方法。最后,调用PrintDialog的Print方法来开始打印过程。 以下是一个示例代码: ```csharp private void PrintCanvas(Canvas canvas) { PrintDialog printDialog = new PrintDialog(); if (printDialog.ShowDialog() == true) { printDialog.PrintTicket.PageOrientation = System.Printing.PageOrientation.Landscape; // 设置打印方向为横向 printDialog.PrintTicket.CopyCount = 1; // 设置打印份数为1 printDialog.PrintVisual(canvas, "Printing Canvas"); } } ``` 至于将Canvas保存XPS文件并进行预览,我们可以使用XpsDocument类来实现。首先,我们需要创建一个XpsDocument对象,并使用XpsDocument的AddFixedDocument方法创建一个FixedDocument对象。然后,我们可以使用FixedDocument的Pages属性来添加需要保存的内容,这里可以将Canvas控件作为一个UIElement添加到Pages。最后,使用XpsDocument的Write方法将内容保存XPS文件,并使用SaveFileDialog类来选择保存路径和文件名。 以下是一个示例代码: ```csharp private void SaveCanvasAsXps(Canvas canvas) { XpsDocument xpsDoc = new XpsDocument("output.xps", FileAccess.Write); XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDoc); FixedDocument fixedDoc = new FixedDocument(); PageContent pageContent = new PageContent(); ((IAddChild)pageContent).AddChild(canvas); fixedDoc.Pages.Add(pageContent); writer.Write(fixedDoc); xpsDoc.Close(); OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "XPS Files (*.xps)|*.xps|All Files (*.*)|*.*"; if (openFileDialog.ShowDialog() == true) { XpsDocumentPreviewWindow previewWindow = new XpsDocumentPreviewWindow(openFileDialog.FileName); previewWindow.ShowDialog(); } } ``` 这样,我们就可以将Canvas控件的内容保存XPS文件,并在预览窗口查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值