本文实例讲述了c#图像截取的实现方法。分享给大家供大家参考。具体如下:
图像截取的相关代码如下:
public Form1() { InitializeComponent(); }private void button1_Click(object sender, EventArgs e) { Image pic = new Bitmap(this.Width, this.Height); Graphics graphic = Graphics.FromImage(pic); graphic.CopyFromScreen(new Point(this.Location.X, this.Location.Y), new Point(0, 0), new Size(this.Width, this.Height)); pic.Save(@"d:/test.jpeg", ImageFormat.Jpeg); graphic.Dispose(); }
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern bool BitBlt( IntPtr hdcDest, //目标设备的句柄 int nXDest, // 目标对象的左上角的X坐标 int nYDest, // 目标对象的左上角的X坐标 int nWidth, // 目标对象的矩形的宽度 int nHeight, // 目标对象的矩形的长度 IntPtr hdcSrc, // 源设备的句柄 int nXSrc, // 源对象的左上角的X坐标 int nYSrc, // 源对象的左上角的X坐标 System.Int32 dwRop // 光栅的操作值 ); [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern IntPtr CreateDC( string lpszDriver, // 驱动名称 string lpszDevice, // 设备名称 string lpszOutput, // 无用,可以设定位"NULL" IntPtr lpInitData // 任意的打印机数据 );
private void Form1_SizeChanged(object sender, EventArgs e) { }
private void button2_Click(object sender, EventArgs e) { this.Hide(); IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null); //创建显示器的DC Graphics g1 = Graphics.FromHdc(dc1); //由一个指定设备的句柄创建一个新的Graphics对象 Bitmap 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); //释放位图句柄
Bitmap img = new Bitmap(MyImage, 800, 600); //缩放图片到800*600 img.Save("d:\\MyJpeg.jpg", ImageFormat.Jpeg); MessageBox.Show("已经把当前屏幕保存到" + "C:\\MyJpeg.jpg文件中!"); this.Show(); }
希望本文所述对大家的C#程序设计有所帮助。