zoukankan      html  css  js  c++  java
  • 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++/CLI中的资源清理(Destructor,Finalizer
    c++/cli 之数据库操作
    利用139,189,yahoo等邮箱短信提示来免费发短信提示
    小例子复习下委托的应用
    c++/cli 之日志记录
    c++/cli 之异步Socket完成端口实例
    C++/CLI, Finalize and Dispose
    C/C++的位运算符操作
    实现自定义控件与背景图完全重叠
    RichTextBox与NotifyIcon简单模仿QQ效果
  • 原文地址:https://www.cnblogs.com/giser-whu/p/3720011.html
Copyright © 2011-2022 走看看