WPF:截取屏幕截图并保存

时间:2016-01-17 10:28:10

标签: c# wpf

我是WPF应用程序的新手,我试着四处寻找能否找到适用于此的东西,但到目前为止我找不到任何工作(我想这是因为它的大部分已经过时)。我想截取整个桌面(即所有显示器)的屏幕截图,并将其保存为.jpg到特定文件夹,当我点击屏幕截图按钮时,时间和日期作为文件名。我能够在我的Windows窗体应用程序中实现这一点,但是我的WPF应用程序无法实现这一点。

这是我用于Windows窗体应用程序的代码。

int screenLeft = SystemInformation.VirtualScreen.Left;
int screenTop = SystemInformation.VirtualScreen.Top;
int screenWidth = SystemInformation.VirtualScreen.Width;
int screenHeight = SystemInformation.VirtualScreen.Height;

using (Bitmap bmp = new Bitmap(screenWidth, screenHeight))
{
    using (Graphics g = Graphics.FromImage(bmp))
    {
        String filename = "ScreenCapture-" + DateTime.Now.ToString("ddMMyyyy-hhmmss") + ".png";
        Opacity = .0;
        g.CopyFromScreen(screenLeft, screenTop, 0, 0, bmp.Size);
        bmp.Save("C:\\ScreenShots\\" + filename);
        Opacity = 1;
    }
}

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:7)

在WPF项目中,您必须手动添加对System.Drawing.dll库的引用。为此,项目>添加参考>程序集选项卡(框架)>检查所需的库。

此外,您的代码只需要稍微调整一下,但这个想法是正确的。

        double screenLeft = SystemParameters.VirtualScreenLeft;
        double screenTop = SystemParameters.VirtualScreenTop;
        double screenWidth = SystemParameters.VirtualScreenWidth;
        double screenHeight = SystemParameters.VirtualScreenHeight;

        using (Bitmap bmp = new Bitmap((int)screenWidth,
            (int)screenHeight))
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                String filename = "ScreenCapture-" + DateTime.Now.ToString("ddMMyyyy-hhmmss") + ".png";
                Opacity = .0;
                g.CopyFromScreen((int)screenLeft, (int)screenTop, 0, 0, bmp.Size);
                bmp.Save("C:\\Screenshots\\" + filename);
                Opacity = 1;
            }

        }