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效果图: