c#实现winform屏幕截图并保存的示例


以下是一个使用C#在WinForms应用程序中实现屏幕截图并保存到文件的基本示例。这段代码演示了如何创建一个简单的WinForms应用程序,其中包含一个按钮,用于触发屏幕截图操作,并将截图保存为PNG文件。

首先,你需要在Visual Studio中创建一个新的WinForms项目。然后,在Form上添加一个Button控件,并为它添加一个点击事件处理器。


using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();

        // 假设你已经在设计视图中添加了名为"btnCaptureScreen"的Button
        // 你可以在这里或者在设计视图中为按钮添加点击事件
        btnCaptureScreen.Click += BtnCaptureScreen_Click;
    }

    private void BtnCaptureScreen_Click(object sender, EventArgs e)
    {
        // 创建一个与屏幕大小相同的Bitmap对象
        Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);

        // 使用Graphics对象从屏幕捕获图像
        using (Graphics g = Graphics.FromImage(bitmap))
        {
            g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,
                            Screen.PrimaryScreen.Bounds.Y,
                            0, 0,
                            bitmap.Size,
                            CopyPixelOperation.SourceCopy);
        }

        // 保存Bitmap到PNG文件
        bitmap.Save("screenshot.png", ImageFormat.Png);

        // 可选:显示消息框以通知用户截图已保存
        MessageBox.Show("截图已保存到screenshot.png");

        // 清理资源
        bitmap.Dispose();
    }
}

在这个示例中,`btnCaptureScreen`是假设的Button控件的名称。你需要将其替换为你实际项目中Button控件的名称。

请注意,这个示例只捕获了主屏幕的截图。如果你的应用程序需要在多显示器环境下工作,并且你需要捕获所有屏幕的截图,那么你需要对代码进行一些修改,以遍历`Screen.AllScreens`集合并分别捕获每个屏幕的截图。

此外,确保你的应用程序具有写入到指定路径的权限,否则`bitmap.Save`方法可能会抛出异常。在这个示例中,截图被保存到了应用程序的根目录下,文件名为`screenshot.png`。你可以根据需要更改文件路径和文件名。