以下是一个基于C#实现的屏幕指定区域截屏的代码示例。这个示例使用了`System.Drawing`命名空间中的类来完成屏幕截图的功能。请确保你的项目中已经引用了`System.Drawing.Common` NuGet包,因为从.NET Core 3.0开始,`System.Drawing`不再是默认包含的。
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
public class ScreenCapture
{
// 定义用于捕获屏幕的API函数
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out Point lpPoint);
// 截屏指定区域的函数
public static Bitmap CaptureScreen(Rectangle bounds)
{
// 创建一个与屏幕指定区域相同大小的Bitmap对象
Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
// 使用Graphics对象绘制屏幕上的内容到Bitmap对象中
using (Graphics g = Graphics.FromImage(bitmap))
{
// 从屏幕的指定区域复制图像
g.CopyFromScreen(bounds.Left, bounds.Top, 0, 0, bitmap.Size, CopyPixelOperation.SourceCopy);
}
return bitmap;
}
// 主函数,用于测试截屏功能
public static void Main()
{
// 获取光标位置(可选,这里仅作为演示)
Point cursorPos;
GetCursorPos(out cursorPos);
// 设定截屏区域,这里以光标位置为中心,截取一个200x200的区域
Rectangle captureArea = new Rectangle(
cursorPos.X - 100, // X坐标:光标X坐标减去100
cursorPos.Y - 100, // Y坐标:光标Y坐标减去100
200, // 宽度
200 // 高度
);
// 调用截屏函数
Bitmap capturedImage = CaptureScreen(captureArea);
// 保存截屏到文件(可选)
capturedImage.Save("CapturedScreen.png", ImageFormat.Png);
// 释放资源
capturedImage.Dispose();
Console.WriteLine("截屏已保存为CapturedScreen.png");
}
}
在这个示例中,`CaptureScreen`函数接受一个`Rectangle`对象作为参数,该对象指定了屏幕上的截屏区域。函数内部,我们首先创建了一个与截屏区域大小相同的`Bitmap`对象,然后使用`Graphics.CopyFromScreen`方法将屏幕上的内容绘制到这个`Bitmap`对象中。最后,我们返回这个`Bitmap`对象,你可以将其保存为文件或进行其他处理。
请注意,这段代码需要在支持GDI+的.NET环境中运行,如.NET Framework或.NET Core/.NET 5+并安装了`System.Drawing.Common`包。此外,由于`System.Drawing.Common`在Linux和macOS上的行为可能与Windows不同,因此如果你在这些平台上运行代码,可能需要额外的配置或考虑使用其他库。