下面是截屏事件的处理:不知道为什么截到图片总是在打开FORM2之前的桌面。                // 创建显示器的dc
                Graphics g = Graphics.FromHdc(CreateDC("DISPLAY", null, null, IntPtr.Zero));                // 由一个指定设备的句柄创建一个新的graphics对象
                Bitmap image = new Bitmap(this.splitContainer1.Panel1.Width, this.splitContainer1.Panel1.Height, g);
                Graphics graphics2 = Graphics.FromImage(image);
                IntPtr hdc = g.GetHdc();
                IntPtr hdcDest = graphics2.GetHdc();                BitBlt(hdcDest, 0, 0, this.splitContainer1.Panel1.Width, this.splitContainer1.Panel1.Height, hdc, 0, 0, 0xcc0020);                // 释放屏幕句柄 
                g.ReleaseHdc(hdc);
                // 释放位图句柄 
                graphics2.ReleaseHdc(hdcDest);
                image.Save(strFileName, ImageFormat.Jpeg);
                image.Dispose();this 是一个Form2窗体。在Form1的Load事件里打开Form2窗体。
           
        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this);
            f2.TopMost = true;
            f2.Show();
        }

解决方案 »

  1.   

    你要等待一定时间,  在 win7 打开窗口特效  必须等特效结束
      

  2.   

    楼主的截屏代码写在什么地方的?还有感觉你截屏的方式不好。先创建图片
    Bitmap bitmap = new Bitmap(
        Screen.PrimaryScreen.Bounds.Width,
        Screen.PrimaryScreen.Bounds.Height);通过图片创建 Graphics
    using (Graphics g = Graphics.FromImage(image))
    {
        截屏
        g.CopyFromScreen(0, 0, 0, 0,
            image.Size, CopyPixelOperation.SourceCopy);
        g.Save();
    }
      

  3.   


    写在一个【保存图片】的BUTTON上啊。和这个有关系吗?这个FORM上有个摄像头,摄像头区域要填充一个有透明区域的相框上。
    然后还可以在这个相片上手写签字。相框和摄像头的合成没有问题。现在是不能合成手写的签名。
      

  4.   

    Graphics g;pictureBox_MouseDown:
    if(e.Button == MouseButtons.Left)
    g = Graphics.FromImage(pictureBox.Image);pictureBox_MouseMove:
    添加绘制签名代码pictureBox_MouseUp:
    保留签名? yes: g.Save();
    g.Dispose();保存图片
      

  5.   

    截屏的时候应该让屏幕停住,建议使用QQ的截屏动态链接库Camera.dll
      

  6.   

    不知道为什么截到图片总是在打开FORM2之前的桌面。
      

  7.   

     //声明一个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     //   光栅的处理数值   
                      );        private void button1_Click(object sender, EventArgs e)
            {
                //获得当前屏幕的大小   
                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);
                BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, -400, -420, 13369376);
                //释放掉屏幕的DC   
                g1.ReleaseHdc(dc1);
                //释放掉Bitmap的DC     
                g2.ReleaseHdc(dc2);
                MyImage.Save(@"c:\1.jpg", ImageFormat.Jpeg);
                MessageBox.Show("当前屏幕已经保存为C盘的1.jpg文件!");   
            }
      

  8.   

    楼主什么意思,你Form2还没加载完,就获取屏幕图片,当然是不包含你的Form2的……你的Form2是个什么东西,能说一下不
      

  9.   


    Form2已经加载完了。FROM2就是一个普通的窗体,但是我上面可以显示摄像头,这个摄像头放在一个相框的透明区域中。然后上面还有一个可以签名地方。最后合成整个图片。
      

  10.   

    你截屏的代码写在哪个窗口里的?
    Form2上可以显示摄像头,只的是从摄像头捕获的视频?那相框又是什么?
    你用 printscreen 截个图贴上来看看撒~!
      

  11.   

    通过FORM1打开FORM2。FORM1只是用存放相框(背景图片),FORM2做成透明窗体。下面是FORM2上的:// 这个是放摄像头的
    private System.Windows.Forms.Panel pCap;只用FORM2不用FORM1还是取不到FORM2上的合成图片。 我想要下面的合成效果。
    摄像头和相框的合成没有问题:(下图)
      

  12.   

    貌似明白楼主说的什么意思了
    捕获摄像头图片貌似用截屏方法是得不到的,获取的只能是视频容器的背景http://bytes.com/topic/c-sharp/answers/748322-capture-picture-digital-camera-using-c
    从这个文章来看,捕获摄像头需要调用相应驱动中的dllCodeproject webcam 示例
    WebCam Fast Image Capture Service using WIAdirectshow 示例 其中有好几个关于视频捕获的示例
    DirectShow Samples搜索关键字 c# capture camera picture
      

  13.   

    CSDN上有个截图工具CaptureImageTool.dll,我用这个工具,
    CaptureImageTool capture = new CaptureImageTool();if (capture.ShowDialog() == DialogResult.OK) // 执行这一句时,没有设置让让窗体隐藏的属性。 可是我的主窗体还是自动隐藏了,不知道和这里有没有关系。
    {    Image imagex = capture.Image;
        imagex.Save(@"C:\数据保存目录\T\xx.jpeg");
    }
      

  14.   

    我这边也隐藏,是TransparencyKey的问题,不设置就不隐藏了
      

  15.   


    不设置 TransparencyKey 就可以实现了吗?我的程序是两个 FORM 叠加,不设置 TransparencyKey 的话,就不能得到摄像头的图像了啊
      

  16.   

    截完屏之后,再打开图片,发现只有test控件是显示的,其他的都是黑色,这是肿么回事额,是不是系统保护了,