C#使用GXDI截取指定大小的屏幕图像并返回图像
时间: 2024-10-02 20:01:04 浏览: 43
在C#中,如果你想使用GXDI(Graphics Device Interface)截取指定大小的屏幕区域,可以稍微修改上面提供的基本截图函数,让它接受屏幕坐标作为参数。这里是一个示例,只截取用户指定的矩形区域:
```csharp
public unsafe byte[] CaptureScreenArea(int left, int top, int width, int height)
{
// ... (之前的导入库部分不变)
try
{
// 首先获取屏幕设备上下文
IntPtr screenDC = GetDC(IntPtr.Zero); // 获取全屏DC
// 创建兼容的设备上下文
IntPtr memDC = CreateCompatibleDC(screenDC);
// 创建内存位图,指定截取的宽度和高度
IntPtr bitmap = CreateCompatibleBitmap(screenDC, width, height);
SelectObject(memDC, bitmap);
// 截取屏幕指定区域并复制到内存位图
BitBlt(memDC, left, top, width, height, screenDC, 0, 0, CopyPixelOperation.SRCCOPY);
// 创建byte数组并保存位图数据
int bytesPerPixel = 4; // 32位颜色,4字节
int bitsPerPixel = 32;
int size = (width * height * bytesPerPixel) / bitsPerPixel;
byte* pixels = stackalloc byte[size];
Marshal.Copy(bitmap, pixels, 0, size);
return Array.AsReadOnly(pixels);
}
finally
{
// 清理资源
if (bitmap != IntPtr.Zero) { DeleteObject(bitmap); }
if (memDC != IntPtr.Zero) { DeleteDC(memDC); }
if (screenDC != IntPtr.Zero) { ReleaseDC(IntPtr.Zero, screenDC); } // 释放全屏DC,而非窗口DC
}
}
// 使用方法
byte[] image = CaptureScreenArea(100, 200, 640, 480); // 指定左上角坐标和截取大小
```
这个函数会截取从`(left, top)`开始,宽高分别为`width`和`height`的屏幕区域。将这些值替换为你需要的坐标即可。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![text/plain; charset=us-ascii](https://img-home.csdnimg.cn/images/20250102104920.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)