WPF控件保存为图片

<MetroChart:ClusteredBarChart
                Name="PerformanceChart"
                ChartTitle="员工绩效"
                ChartSubTitle="流出流入绩效"
                FontSize="14"
                SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"
                SeriesSource="{Binding Path=Series}"
                IsRowColumnSwitched="True"
             >
                <MetroChart:ClusteredBarChart.Resources>
                    <ResourceDictionary Source="pack://application:,,,/De.TorstenMandelkow.MetroChart;component/Themes/Generic.xaml"/>
                </MetroChart:ClusteredBarChart.Resources>
                <MetroChart:ClusteredBarChart.SeriesTemplate>
                    <DataTemplate>
                        <MetroChart:ChartSeries
                            SeriesTitle="{Binding Path=DisplayName}"
                            DisplayMember="Performer"
                            ValueMember="Score"
                            ItemsSource="{Binding Path=Items}"
                          />
                    </DataTemplate>
                </MetroChart:ClusteredBarChart.SeriesTemplate>
            </MetroChart:ClusteredBarChart>
 Size size = new Size(this.Width, this.Height);
            PerformanceChart.Measure(size);

            var rtb = new RenderTargetBitmap(
               (int)PerformanceChart.ActualWidth, //width
               (int)PerformanceChart.ActualHeight, //height
               96, //dpi x
               96, //dpi y
               PixelFormats.Pbgra32 // pixelformat
               );
            rtb.Render(PerformanceChart);         

            var bitmap = rtb;

            byte[] data;
            System.Windows.Media.Imaging.JpegBitmapEncoder encoder = new System.Windows.Media.Imaging.JpegBitmapEncoder();
            encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(bitmap));
            using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
            {
                encoder.Save(ms);
                data = ms.ToArray();
            }

            NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
            var sheet = workbook.CreateSheet();
            var row = sheet.CreateRow(0);
            var cell = row.CreateCell(0);
            cell.SetCellValue("Hello world");
            row = sheet.CreateRow(1);
            cell = row.CreateCell(0);

            int pictureIdx = workbook.AddPicture(data, NPOI.SS.UserModel.PictureType.PNG);

            NPOI.HSSF.UserModel.HSSFPatriarch patriarch = (NPOI.HSSF.UserModel.HSSFPatriarch)sheet.CreateDrawingPatriarch();
            var rowsNum = 1;
            //add a picture
            NPOI.HSSF.UserModel.HSSFClientAnchor anchor = new NPOI.HSSF.UserModel.HSSFClientAnchor(0, 10, 1023, 0, 0, rowsNum, 2, rowsNum);

            NPOI.HSSF.UserModel.HSSFPicture pict = (NPOI.HSSF.UserModel.HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
            pict.Resize();

            var dlg = new Microsoft.Win32.SaveFileDialog { Filter = ".xls files|*.xls", DefaultExt = ".xls" };
            var path = dlg.ShowDialog(this).Value ? dlg.FileName : null;
            if (path != null)
            {
                using (System.IO.FileStream fs = new System.IO.FileStream(dlg.FileName, System.IO.FileMode.OpenOrCreate))
                {

                    //将内容写入到硬盘中 

                    workbook.Write(fs);

                }
            }
            System.Windows.MessageBox.Show("导出成功!");
时间: 2024-08-04 04:00:05

WPF控件保存为图片的相关文章

WPF控件库:图片按钮的封装

需求:很多时候界面上的按钮都需要被贴上图片,一般来说: 1.按钮处于正常状态,按钮具有背景图A 2.鼠标移至按钮上方状态,按钮具有背景图B 3.鼠标点击按钮状态,按钮具有背景图C 4.按钮处于不可用状态,按钮具有背景图D 实现起来,毫无疑问,没什么难度.但是过程还是比较繁琐.这里我将这个过程封装为新的控件类:ImageButton ImageButton中有四个属性(支持绑定),分别对应上面A.B.C.D四个背景图的路径. #region 属性 /// <summary> /// 按钮处于正常

解决嵌入WinForm的WPF控件无法显示图片问题

解决办法是在控件初始化时,通过下面方法再次加载图片: ucCanvas.CreateCoordinateImage.Source = GetImageIcon(global::MainApplication.Properties.Resources.DL_Coordinate2); private static BitmapImage GetImageIcon(System.Drawing.Bitmap bitmap) { BitmapImage bitmapImage = new Bitmap

WPF控件到图片的转换

在实际的项目开发中,经常需要将信息保存成图片的形式,如屏幕截图.地图快照等操作,我中最近一个项目中便有这样的需求,项目(WPF)中用到GMap.NET控件,中地图上展示一些信息,过程中可能用户需要将地图信息保存下来,也就是地图快照,我的界面如下所示: 网上查了GMap相关的资料,没有找到GMap怎么截图的方法,最后找到网友提供的方法:将WPF控件转换成图片. 具体实现如下: namespace QACDR2.Common { internal enum ImageType { Bmp, Gif,

WPF 保存image控件里的图片

string ProImgPath = ProcessPath + name + ".png";//要保存的图片的地址,包含文件名 BitmapSource BS = (BitmapSource)ImgPro.Source; PngBitmapEncoder PBE = new PngBitmapEncoder(); PBE.Frames.Add(BitmapFrame.Create(BS)); using (Stream stream = File.Create(ProImgPath

WPF Image控件使用本地图片

BitmapImage bi = new BitmapImage(); // BitmapImage.UriSource must be in a BeginInit/EndInit block. bi.BeginInit(); StreamResourceInfo info = Application.GetRemoteStream(new Uri("Test.jpg", UriKind.Relative)); bi.StreamSource = info.Stream; bi.En

代码方式给控件添加背景图片(WPF)

wpf中常常需要给控件添加背景图片,下边以wrapPanel为例,使用代码添加背景图片 WrapPanel xwraPanel = new WrapPanel(); ImageBrush ximgBrush = new ImageBrush(); Uri xuri = new Uri("pack://application:,,,/Images/JXimgs/MeterLayout.png", UriKind.Absolute); //注意这个的写法 ximgBrush.ImageSo

DevExpress v15.1:WPF控件升级(四)

<下载最新版DevExpress WPF Controls v15.1.5> WPF编辑器 在Token编辑器中的Per-Pixel滚动 水平和垂直的per-pixel滚动 渐进式搜索 查找和组合框编辑器:在只读模式中渐进式搜索. WPF Tab Control Web浏览器的分页用户界面 在新的版本中,我们的WPF Tab控件可用于创建具有分页用户界面的应用程序--如同那些在当代Web浏览器中的应用程序一样.新功能包含了一个新的DXTabbedWindow组件,支持最终用户拖拽.自定义用户界

WPF学习系列之五(WPF控件)

控件:    1.内容控件------这些控件能够包含嵌套的元素,为它们提供几乎无限的显示能力.内容控件包括Lable,Button 以及ToolTip类. 内容控件是更特殊的控件类型,它们可以包含(并显示)一块内容.从技术角度来讲,内容控件是可以包含单个嵌套元素的控件.与布局容器不同的是内容控件只能包含一个子元素,而布局控件只要愿意可以包含任意多个嵌套元素.              提示:当然,仍然可以在单个内容控件中放置大量内容-----诀窍是使用单个容器,比如,使用StackPanel面

(四)开源C# WPF控件库《AduSkin – UI》

微信公众号:[Dotnet9的博客],网站:[Dotnet9],问题或建议:[请网站留言], 如果对您有所帮助:[欢迎赞赏]. (四)开源C# WPF控件库<AduSkin> 追求极致,永臻完美 A Beautiful WPF Control UI 一款简单漂亮的WPF UI,融合部分开源框架的组件,为个人定制的UI,可供学者参考. 阅读导航 关于<AduSkin> 1.1 控件库全貌 1.2 动态修改主题色 1.3 技术交流 基于<AduSkin>控件库衍生的Case