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

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

效果图:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115605.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别

    【Java】一篇文章带你了解String、StringBuffer和StringBuilder的区别String:字符串常量StringBuffer:字符串变量(多线程情况下使用,保护线程安全)synchronized:保护线程安全的StringBuilder:字符串变量(单线程情况下使用)String、StringBuffer、StringBuilder的主要区别:1.String类的内容不可以修改,而StringBuffer和StringBuilder的内容可以修改;2.StringBuffer和StringBuilder的大部分功能都是相似的;3.StringBu..

    2022年7月17日
    15
  • ICMP详解「建议收藏」

    ICMP详解「建议收藏」ICMP(InternetControlMessageProtocol)网际控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的…

    2022年7月12日
    18
  • html鼠标手状态,css鼠标样式cursor介绍(鼠标手型)

    html鼠标手状态,css鼠标样式cursor介绍(鼠标手型)CSS鼠标样式语法如下:任意标签中插入style=”cursor:*”例子:文本或其它页面元素文本或其它页面元素注意把*换成如下15个效果的一种:下面是对这15种效果的解释。移动鼠标到解释上面,看看你的鼠标起了什么变化吧!hand是手型例子:CSS鼠标手型效果CSS鼠标手型效果pointer也是手型,这里推荐使用这种,因为这可以在多种浏览器下使用。例子:CSS鼠标手型效果CS…

    2022年5月6日
    54
  • tabnine激活码(破解版激活)

    tabnine激活码(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    48
  • tcpdump抓包命令详解_tcpdump抓udp包命令详解

    tcpdump抓包命令详解_tcpdump抓udp包命令详解tcpdump

    2022年8月20日
    12
  • pandas用法-全网最详细教程

    pandas用法-全网最详细教程一、生成数据表1、首先导入pandas库,一般都会用到numpy库,所以我们先导入备用:importnumpyasnpimportpandasaspd2、导入CSV或者xlsx文件:df=pd.DataFrame(pd.read_csv(‘name.csv’,header=1))df=pd.DataFrame(pd.read_excel(‘nam…

    2022年6月12日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号