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)
),并确保目标窗口位于顶部,然后裁剪该区域。。。