c#中有无这样类似的函数,就是把窗体上的自己画的图象拷贝到内存dc中。在vc中用bitblt可以实现。那在c#可以怎么实现呢。
注:不是从屏幕CopyFromScreen。这个函数有这样的传输功能。但是他是相对屏幕来说的。我要求的是自己的窗体。

解决方案 »

  1.   

    你调用非托管代码不就可以了
     [DllImport("gdi32.dll")]
            private static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, Int32 dwrop);
            private void btnGetScreen_Click(object sender, EventArgs e)
            {
                //抓取屏幕
                /*
                Rectangle rScreen = new Rectangle();
                rScreen = Screen.GetWorkingArea(this);
                Graphics g1 = this.CreateGraphics();
                Image theImage = new Bitmap(rScreen.Width, rScreen.Height, g1);
                Graphics g2 = Graphics.FromImage(theImage);            IntPtr ihandle = g1.GetHdc();
                IntPtr iSrc = g2.GetHdc();
                BitBlt(iSrc, 2, 0, rScreen.Width, rScreen.Height, ihandle, 0, 0, 13369376);
                g1.ReleaseHdc(ihandle);
                g2.ReleaseHdc(iSrc);
                theImage.Save(@"c:\Kevin.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                MessageBox.Show("抓取成功!");
                 * */
                //抓取窗体
                Rectangle rForm = new Rectangle();
                rForm = this.Bounds;
                Graphics g1 = this.CreateGraphics();
                Image theImage = new Bitmap(rForm.Width, rForm.Height, g1);
                Graphics g2 = Graphics.FromImage(theImage);            IntPtr ihandle = g1.GetHdc();
                IntPtr iSrc = g2.GetHdc();
                BitBlt(iSrc, 2, 0, rForm.Width, rForm.Height, ihandle, 0, 0, 13369376);
                g1.ReleaseHdc(ihandle);
                g2.ReleaseHdc(iSrc);
                theImage.Save(@"c:\Kevin.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                MessageBox.Show("抓取成功!");        }
      

  2.   

    我是直接调用的bitblt来搞定这个问题的
    private void button1_Click(object sender, System.EventArgs e) { Graphics g1 = this.CreateGraphics();//获得窗体图形对象 Image MyImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height, g1); Graphics g2 = Graphics.FromImage(MyImage);//创建位图图形对象 IntPtr dc1 = g1.GetHdc();//获得窗体的上下文设备 IntPtr dc2 = g2.GetHdc();//获得位图文件的上下文设备 BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);//写入到位图  g1.ReleaseHdc(dc1);//释放窗体的上下文设备 g2.ReleaseHdc(dc2);//释放位图文件的上下文设备 MyImage.Save(@"c:\Captured.jpg", ImageFormat.Jpeg);//保存为jpeg文件 MessageBox.Show("保存图片结束!"); } http://www.longtengwang.com/Article/soft/Csharp/csharpSL/200710/7075.html