using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Drawing.Imaging; namespace CV { class GetScreenIng_Class { [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern bool BitBlt( IntPtr hdcDest, //目标设备的句柄 int nXDest, // 目标对象的左上角的X坐标 int nYDest, // 目标对象的左上角的Y坐标 int nWidth, // 目标对象的矩形的宽度 int nHeight, // 目标对象的矩形的高度 IntPtr hdcSrc, // 源设备的句柄 int nXSrc, // 源对象的左上角的X坐标 int nYSrc, // 源对象的左上角的Y坐标 System.Int32 dwRop // 光栅的操作值 ); [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern IntPtr CreateDC( string lpszDriver, // 驱动名称 string lpszDevice, // 设备名称 string lpszOutput, // 无用,可以设定为"NULL" IntPtr lpInitData // 任意的打印机数据 ); public Bitmap GetScreenImg() { Bitmap MyImage = null; IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null); //创建显示器的DC Graphics g1 = Graphics.FromHdc(dc1); //由一个指定设备的句柄创建一个新的Graphics对象 MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1); //根据屏幕大小创建一个与之相同大小的Bitmap对象 Graphics g2 = Graphics.FromImage(MyImage); //获得屏幕的句柄 IntPtr dc3 = g1.GetHdc(); //获得位图的句柄 IntPtr dc2 = g2.GetHdc(); //把当前屏幕捕获到位图对象中 BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376); //把当前屏幕拷贝到位图中 g1.ReleaseHdc(dc3); //释放屏幕句柄 g2.ReleaseHdc(dc2); //释放位图句柄 return MyImage; } } } 调用: GetScreenIng_Class sc = new GetScreenIng_Class(); System.Drawing.Bitmap img=sc.GetScreenImg(); img.Save("c://screen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片为jpeg格式 |
C#实现屏幕捕获
最新推荐文章于 2024-02-20 23:50:52 发布