基于C#实现的屏幕指定区域截屏代码


以下是一个基于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不同,因此如果你在这些平台上运行代码,可能需要额外的配置或考虑使用其他库。