前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 保存窗口为图片(保存纵断面图)

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

作者头像
全栈程序员站长
发布2022-07-10 11:26:02
5000
发布2022-07-10 11:26:02
举报

大家好,又见面了,我是全栈君。

源代码例如以下:

代码语言:javascript
复制
     #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# 保存窗口为图片(保存纵断面图)
C# 保存窗口为图片(保存纵断面图)

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档