C#对被遮挡的窗体进行截图

  • A+
所属分类:Linux编程
摘要

最近在做的一个项目,用的地图控件比较特殊, 在地图上面自己绘制的东东没办法随地图一起导出成图片 只能绕个弯,用截屏的方式了一

最近在做的一个项目,用的地图控件比较特殊,

在地图上面自己绘制的东东没办法随地图一起导出成图片

只能绕个弯,用截屏的方式了
一开始用的是这样:

  1. /// <summary>   
  2. /// 截图   
  3. /// </summary>   
  4. /// <returns></returns>   
  5. private Image CaptureScreen()  
  6. {  
  7.     Image MyImage = null;  
  8.   
  9.     //获得当前地图控件的大小   
  10.     Graphics grapScreen = m_pFremework.Hook.CreateGraphics();  
  11.   
  12.     //Rectangle rect = new Rectangle();   
  13.     //rect = Screen.GetWorkingArea(m_pFremework.Hook);//范围不准确,直接使用控件的属性   
  14.     Rectangle rect = new Rectangle(0, 0, m_pFremework.Hook.Width, m_pFremework.Hook.Height);  
  15.     MyImage = new Bitmap(rect.Width, rect.Height, grapScreen);  
  16.     Graphics grapImage = Graphics.FromImage(MyImage);  
  17.     IntPtr dc1 = grapScreen.GetHdc();  
  18.     IntPtr dc2 = grapImage.GetHdc();  
  19.       
  20.     BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);  
  21.   
  22.     //释放掉DC   
  23.     grapScreen.ReleaseHdc(dc1);  
  24.     grapImage.ReleaseHdc(dc2);  
  25.     return MyImage;  
  26. }  
  1. private Image CaptureScreen2()  
  2.         {  
  3.             Image MyImage = null;  
  4.             IntPtr hdc = GetWindowDC(m_pFremework.MdiForm.Handle);  
  5.             LPPOINT lphook = new LPPOINT();  
  6.             lphook.x = 0;  
  7.             lphook.y = 0;  
  8.   
  9.             ClientToScreen(m_pFremework.Hook.Handle, ref lphook);  
  10.             ScreenToClient(m_pFremework.MdiForm.Handle, ref lphook);  
  11.             Rectangle rect = new Rectangle(lphook.x, lphook.y, m_pFremework.Hook.Width, m_pFremework.Hook.Height);  
  12.             if (hdc != IntPtr.Zero)  
  13.             {  
  14.                 IntPtr hdcMem = CreateCompatibleDC(hdc);  
  15.                 if (hdcMem != IntPtr.Zero)  
  16.                 {  
  17.                     IntPtr hbitmap = CreateCompatibleBitmap(hdc, m_pFremework.MdiForm.Width, m_pFremework.MdiForm.Height);  
  18.                     if (hbitmap != IntPtr.Zero)  
  19.                     {  
  20.                         IntPtr ip = SelectObject(hdcMem, hbitmap);  
  21.                         if (ip != IntPtr.Zero)  
  22.                         {  
  23.                             bool a = PrintWindow(m_pFremework.MdiForm.Handle, hdcMem, 1);  
  24.                             DeleteObject(hbitmap);  
  25.                             Image tempImg = Image.FromHbitmap(hbitmap);  
  26.                             Bitmap b = new Bitmap(tempImg);  
  27.                             MyImage = b.Clone(rect, b.PixelFormat);  
  28.                         }  
  29.                     }  
  30.                 }  
  31.             }  
  32.   
  33.             return MyImage;  
  34.         }  

除非注明,否则均为@蒲公英网原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.aipgy.com/61544.html

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: