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# 保存窗口为图片(保存纵断面图)

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • c++查找文件的方法[通俗易懂]

    c++查找文件的方法[通俗易懂]CFileFindfinder;  BOOLbWorking=finder.FindFile(szBuf);unsignedshort slogtype=0;   while(bWorking) {    bWorking=finder.FindNextFile();    CStringstrfilename=fin

  • springboot配置多个yml_spring几种配置方式

    springboot配置多个yml_spring几种配置方式YMLrabbitmq:first:username:${app.appkey}password:${app.appkey}virtual-host:${app.appid}addresses:x.x.x.x:5672,x.x.x.x:5672second:username:guestpassword:guestvirtual-host:/host:12

  • SpringBoot自定义starters

    SpringBoot自定义startersSpringBoot自定义starters1、简介2、如何自定义starter1、简介SpringBoot最强大的功能就是把我们常用的场景 抽象成一个个starter(场景启动器),我们通过引入springBoot为我们提供这些场景启动器,我们再进行少量的配置就能使用相应的功能。但是,SpringBoot不能包含所有的场景,经常需要我们自定义starter,来简化我们对springBoot的使用。2、如何自定义starter…

    2022年10月23日
  • 小精灵无尽的长廊_绝顶高手的养成日常

    小精灵无尽的长廊_绝顶高手的养成日常推荐:巫医觉醒https://www.guibuyu.org/。华夏北方,临近东海的不知名小城里,有绵延不尽的山峰耸立。其中一座,造型独特,神似一位席地而坐头戴鹤勉的君王模样,被当地的村名唤作“唐王山寨”。唐王山寨并不算高,只有大约300米的高度,在山峰环绕的小城里,不太显眼。正值夏季,正午的灼热阳光肆意挥洒,通往唐王山寨的油柏小路,蒸腾出肉眼可见的水雾,和着沥青独有的气息,飘荡远方。沿着小路一路…

  • 线程池参数配置详解[通俗易懂]

    线程池参数配置详解[通俗易懂]/***Createsanew{@codeThreadPoolExecutor}withthegiveninitial*parameters.**@paramcorePoolSizethenumberofthreadstokeepinthepool,even*iftheyareidle,unless{@codeallowCoreThreadTimeOut}isset.

  • 前端调用rpc接口_api接口调用

    前端调用rpc接口_api接口调用问题背景需要根据id通过rpc调用查询具体信息,因为没有提供批量查询的接口,所以做法是挨个遍历查询,那意味着:如果有100个id,就需要顺序进行100次rpc调用,假设每次rpc接口的调用时间是50ms(这个速度很快了),那单单rpc调用就要占用5s,所以接口的响应会非常慢。下面进行优化。优化方案:方案一:让服务方提供批量查询接口,需要服务提供方配合,这里暂不采用。方案二:rpc服务的调用由顺序调用修改为并行调用,采用线程池实现rpc的并发调用。具体实现如下:1)创建线程的类public

    2022年10月11日

发表回复

您的电子邮箱地址不会被公开。

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