这是我写的方法:point 是所截图的位置,size是大小
可是现在大小没错,但位置有些出入,望高手指点
public void DrawScreen(Point point,Size size)
        {
           //获得当前屏幕的大小 
            Rectangle rect = new Rectangle();
            rect = Screen.GetWorkingArea(this);            //创建一个以当前屏幕为模板的图象 
            Graphics g1 = this.CreateGraphics();
            Image MyImage = new Bitmap(size.Width, size.Height, g1);
            
            Graphics g2 = Graphics.FromImage(MyImage);
            //得到屏幕的DC 
            IntPtr dc1 = g1.GetHdc();
            //得到Bitmap的DC 
            IntPtr dc2 = g2.GetHdc();
            //调用此API函数,实现屏幕捕获 (主要不知道这几个参数的作用)
            BitBlt(dc2, 0, 0, size.Width, size.Height, dc1, 0, 0, 13369376);//13369376
            //释放掉屏幕的DC 
            g1.ReleaseHdc(dc1);
            //释放掉Bitmap的DC 
            g2.ReleaseHdc(dc2);
            if (DialogResult.OK == this.saveFileDialog1.ShowDialog())
            {
                MyImage.Save(this.saveFileDialog1.FileName, ImageFormat.Bmp);
                MessageBox.Show("当前屏幕已经保存为" + this.saveFileDialog1.FileName + "文件!");
            }        }

解决方案 »

  1.   

    你没用point参数
    怎么能一样呢
      

  2.   

    可是不知道point加在那里合适
    主要不知道BitBlt参数的含义
    昨天在if里改为
    if (DialogResult.OK == this.saveFileDialog1.ShowDialog())
                {
                    RectangleF ps = new Rectangle(point, size);
                    Bitmap bitmap= new Bitmap(MyImage);
                    //将原图按位复制到newImage
                    Image newImage= bitmap.Clone(ps, PixelFormat.Format16bppRgb555);
                    newImage.Save(this.saveFileDialog1.FileName, ImageFormat.Bmp);
                    MyImage.Dispose();
                    newImage.Dispose();
                }可出来的效果还是不行