问题描述
|
我有一个.NET控件,可通过非托管代码输出视频。
我想捕获控件客户区域(一个视频帧)。
方法Control.DrawToBitmap不起作用,它输出控件背景-灰色。
然后,我尝试使用GDI的BitBlt:
[DllImport(\"gdi32.dll\")]
private static extern bool BitBlt(
IntPtr hdcDest,// handle to destination DC
int nXDest,// x-coord of destination upper-left corner
int nYDest,// y-coord of destination upper-left corner
int nWidth,// width of destination rectangle
int nHeight,// height of destination rectangle
IntPtr hdcSrc,// handle to source DC
int nXSrc,// x-coordinate of source upper-left corner
int nYSrc,// y-coordinate of source upper-left corner
int dwRop // raster operation code
);
private const int SRCCOPY = 0xCC0020;
private void btnSave_Click(object sender,EventArgs e)
{
Graphics graphic = captureBox.CreateGraphics();
Bitmap memImage = new Bitmap(captureBox.Width,captureBox.Height,graphic);
Graphics memGraphic = Graphics.FromImage(memImage);
IntPtr dc1 = graphic.GetHdc();
IntPtr dc2 = memGraphic.GetHdc();
BitBlt(dc2,this.captureBox.ClientRectangle.Width,this.captureBox.ClientRectangle.Height,dc1,SRCCOPY);
graphic.ReleaseHdc(dc1);
memGraphic.ReleaseHdc(dc2);
memImage.Save(\"capture.bmp\",ImageFormat.Bmp);
}
它可以工作,但是问题在于它可以捕获所有内容,甚至可以捕获所捕获控件上的所有控件。
我想捕获控制客户区,即使它重叠。如何实现?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)