• C# 保存窗体为图片(保存纵断面图)


    源码如下:

         #region 保存纵断面截图
    
            private void button_save_Click(object sender , EventArgs e)
            {
                SaveFileDialog saveImageDialog = new SaveFileDialog();
                saveImageDialog.Title = "保存纵断面图";
                saveImageDialog.DefaultExt = ".png";
                saveImageDialog.FileName = Linefeaturelayer.Name + "纵断面图";
                saveImageDialog.InitialDirectory = "C:\";
    
                DialogResult dr = saveImageDialog.ShowDialog();
                if (dr==DialogResult.OK)
                {
                    CaptureImage(saveImageDialog.FileName);
                    MessageBox.Show("保存成功!");
                }
    
            }
    
            private void CaptureImage(string path)
            {
                try
                {
                    //获得当前屏幕的大小
                    Rectangle rect = new Rectangle();
                    rect = Screen.GetWorkingArea(this);
                    //创建一个以当前屏幕为模板的图象
                    Graphics g1 = this.CreateGraphics();
                    //创建以屏幕大小为标准的位图 
                    Image MyImage = new Bitmap(rect.Width , rect.Height , g1);
                    Graphics g2 = Graphics.FromImage(MyImage);
                    //得到屏幕的DC
                    IntPtr dc1 = g1.GetHdc();
                    //得到Bitmap的DC 
                    IntPtr dc2 = g2.GetHdc();
                    //调用此API函数,实现屏幕捕获
                    BitBlt(dc2 , 0 , 0 , rect.Width , rect.Height , dc1 , 0 , 0 , 13369376);
                    //释放掉屏幕的DC
                    g1.ReleaseHdc(dc1);
                    //释放掉Bitmap的DC 
                    g2.ReleaseHdc(dc2);
                    //以JPG文件格式来保存
                    MyImage.Save(path , ImageFormat.Png);
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message + " 保存图片失败!"); 
                }
            }
    
            //声明一个API函数
            [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
         
            private static extern bool BitBlt(
                
                IntPtr hdcDest , // 目标 DC的句柄
                int nXDest ,
                int nYDest ,
                int nWidth ,
                int nHeight ,
                IntPtr hdcSrc ,  // 源DC的句柄
                int nXSrc ,
                int nYSrc ,
                System.Int32 dwRop  // 光栅的处理数值
                
                );
    
            #endregion
    效果图:



  • 相关阅读:
    node.js结合wechaty实现微信机器人[基础篇]
    .env文件为NodeJS全局环境变量
    基于jquery实现一个提示插件
    Puppeteer实现一个超简单的自动化机器人
    Vue高仿阿里动态banner,制作组件
    css不常用属性
    Vue表单校验失败滚动到错误位置
    C# Func委托
    深入解析C# 4th 笔记(第一章)
    C# 笔记 XML基础
  • 原文地址:https://www.cnblogs.com/giser-whu/p/3720011.html
Copyright © 2020-2023  润新知