WPF下保存控件内容为图片

1、选取要绑定的控件名称

2、设置保存图片的类型和格式、路径


        //保存图片处理事件
        private void Save_image_Click(object sender, RoutedEventArgs e)

        {
            string outputfile="";//文件保存路径声明
            System.Windows.Forms.SaveFileDialog dialog = new System.Windows.Forms.SaveFileDialog();                                           //允许dialog来保存到一个地址
            dialog.Filter = "Png Files|*.BMP";                                                      // 文件保存类型
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)                        //将ok返回默认用户公共对话框
            {
               outputfile=dialog.FileName;                                                       //获取文件路径
            }
            GetPicFromControl(plotter, "BMP", outputfile);//要截取的控件名称 输出图片的格式  输出图片的路径
        }

3、保存图片

 //截屏函数
        private void GetPicFromControl(FrameworkElement element, String type, String outputPath)
        {
            //96为显示器DPI
            var bitmapRender = new RenderTargetBitmap((int)element.ActualWidth, (int)element.ActualHeight+100, 96, 96, PixelFormats.Pbgra32);//位图 宽度  高度   水平DPI  垂直DPI  位图的格式    高度+100保证整个图都能截取
            //控件内容渲染RenderTargetBitmap
            bitmapRender.Render(element);
            BitmapEncoder encoder = null;
            //选取编码器
            switch (type.ToUpper())
            {
                case "BMP":
                    encoder = new BmpBitmapEncoder();
                    break;
                case "GIF":
                    encoder = new GifBitmapEncoder();
                    break;
                case "JPEG":
                    encoder = new JpegBitmapEncoder();
                    break;
                case "PNG":
                    encoder = new PngBitmapEncoder();
                    break;
                case "TIFF":
                    encoder = new TiffBitmapEncoder();
                    break;
                default:
                    break;
            }
            //对于一般的图片,只有一帧,动态图片是有多帧的。
            encoder.Frames.Add(BitmapFrame.Create(bitmapRender));//添加图
            if (!Directory.Exists(System.IO.Path.GetDirectoryName(outputPath)))
                Directory.CreateDirectory(System.IO.Path.GetDirectoryName(outputPath));
            using (var file = File.Create(outputPath))//存储文件
                encoder.Save(file);
        }

猜你喜欢

转载自blog.csdn.net/kenjianqi1647/article/details/82699342
今日推荐