Canvas另存

把canvas保存为文本文件:
  using System.Windows.Markup;
  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);
  }


把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;
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Python tkinter中实现另为图片功能,可以使用Python Imaging Library(PIL)。 首先,导入必要的库: ```python from tkinter import * from tkinter import filedialog from PIL import Image, ImageDraw ``` 然后,创建一个画布并绘制一些形状: ```python # 创建画布 canvas_width = 400 canvas_height = 400 canvas = Canvas(root, width=canvas_width, height=canvas_height, bg='white') canvas.pack() # 绘制一个圆形和一个矩形 canvas.create_oval(50, 50, 150, 150, fill='red') canvas.create_rectangle(200, 200, 300, 300, fill='blue') ``` 接下来,定义一个函数来保画布中的内容为图片: ```python def save_canvas(): # 获取画布截图 x = root.winfo_rootx() + canvas.winfo_x() y = root.winfo_rooty() + canvas.winfo_y() x1 = x + canvas.winfo_width() y1 = y + canvas.winfo_height() image = ImageGrab.grab((x, y, x1, y1)) # 弹出文件对话框,选择保位置和文件名 file_path = filedialog.asksaveasfilename(defaultextension='.png') if file_path: image.save(file_path) ``` 最后,创建一个按钮来触发保函数: ```python # 创建按钮 save_btn = Button(root, text='Save as Image', command=save_canvas) save_btn.pack() ``` 完整代码如下: ```python from tkinter import * from tkinter import filedialog from PIL import Image, ImageDraw, ImageGrab root = Tk() root.title('Save Canvas as Image') root.geometry('400x450') # 创建画布 canvas_width = 400 canvas_height = 400 canvas = Canvas(root, width=canvas_width, height=canvas_height, bg='white') canvas.pack() # 绘制一个圆形和一个矩形 canvas.create_oval(50, 50, 150, 150, fill='red') canvas.create_rectangle(200, 200, 300, 300, fill='blue') def save_canvas(): # 获取画布截图 x = root.winfo_rootx() + canvas.winfo_x() y = root.winfo_rooty() + canvas.winfo_y() x1 = x + canvas.winfo_width() y1 = y + canvas.winfo_height() image = ImageGrab.grab((x, y, x1, y1)) # 弹出文件对话框,选择保位置和文件名 file_path = filedialog.asksaveasfilename(defaultextension='.png') if file_path: image.save(file_path) # 创建按钮 save_btn = Button(root, text='Save as Image', command=save_canvas) save_btn.pack() root.mainloop() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值