首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

类似功能的c#函数~就是类似bitblt的

2012-01-23 
求一个类似功能的c#函数~~就是类似bitblt的c#中有无这样类似的函数,就是把窗体上的自己画的图象拷贝到内存

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

[解决办法]
你调用非托管代码不就可以了
 [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("抓取成功!");

}
[解决办法]
我是直接调用的bitblt来搞定这个问题的

C# code
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("保存图片结束!"); } 

热点排行