C# 在窗口中的指定区域捕获图像

C# 在窗口中的指定区域捕获图像,c#,gdi,C#,Gdi,因此,我的目标是使我的程序能够在特定窗口的矩形区域中拍照。 如果我想捕捉黑色正方形(完整)并且只捕捉正方形(而不是窗口Y的任何部分)。我怎样才能做到这一点 我曾尝试使用GDI32.dll,但似乎无法将其配置为仅捕获黑方块 public static Bitmap CaptureWindow(IntPtr handle) { IntPtr hdcSrc = User32.GetWindowDC(handle); User32.RECT windowRect = new User32.REC

因此,我的目标是使我的程序能够在特定窗口的矩形区域中拍照。

如果我想捕捉黑色正方形(完整)并且只捕捉正方形(而不是窗口Y的任何部分)。我怎样才能做到这一点

我曾尝试使用GDI32.dll,但似乎无法将其配置为仅捕获黑方块

public static Bitmap CaptureWindow(IntPtr handle) {
 IntPtr hdcSrc = User32.GetWindowDC(handle);

 User32.RECT windowRect = new User32.RECT {
  left = 467,
   right = 1432,
   top = 381,
   bottom = 994
 };

 int width = 965;
 int height = 613;

 IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc);

 IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width, height);

 IntPtr hOld = GDI32.SelectObject(hdcDest, hBitmap);

 GDI32.BitBlt(hdcDest, windowRect.right, windowRect.bottom, width, height, hdcSrc, windowRect.left, windowRect.top, GDI32.SRCCOPY);

 GDI32.SelectObject(hdcDest, hOld);

 GDI32.DeleteDC(hdcDest);
 User32.ReleaseDC(handle, hdcSrc);

 Image img = Image.FromHbitmap(hBitmap);

 GDI32.DeleteObject(hBitmap);

 return (Bitmap) img;
}

屏幕截图将包括重叠窗口。请改用。@HansPassant谢谢,但我如何才能只捕获区域,我要捕获它很多,所以我也想减少它需要的CPU量,与该程序的作者一起寻找更好的方法。它应该是
BitBlt(dst,0,0,width,height,src,left,top,SRCCOPY)
此方法仅适用于Win32程序,我喜欢记事本。一般情况下,您必须拍摄整个桌面的屏幕截图(使用
hdcsc=GetWindowDC(NULL)
),并确保目标窗口位于顶部,然后裁剪该区域……屏幕截图将包括重叠窗口。请改用。@HansPassant谢谢,但我如何才能只捕获区域,我要捕获它很多,所以我也想减少它需要的CPU量,与该程序的作者一起寻找更好的方法。它应该是
BitBlt(dst,0,0,width,height,src,left,top,SRCCOPY)
此方法仅适用于Win32程序,我喜欢记事本。一般来说,您必须拍摄整个桌面的屏幕截图(使用
hdcsc=GetWindowDC(NULL)
),并确保目标窗口位于顶部,然后裁剪该区域。。。