C# 不带任务栏和窗体外部边缘的窗体活动区域的屏幕截图

C# 不带任务栏和窗体外部边缘的窗体活动区域的屏幕截图,c#,winforms,visual-studio,screenshot,C#,Winforms,Visual Studio,Screenshot,我试图捕获windows窗体应用程序的屏幕截图,但当我捕获屏幕截图时,任务栏位于应用程序的顶部和边缘。我只想捕获应用程序内部的屏幕截图,不包括应用程序和任务栏外部的边缘。下面是我用来创建应用程序屏幕截图的代码 private void captureScreenshot() { Rectangle bounds = this.Bounds; using (Bitmap bitmap = new Bitmap(bounds.Width, bounds

我试图捕获windows窗体应用程序的屏幕截图,但当我捕获屏幕截图时,任务栏位于应用程序的顶部和边缘。我只想捕获应用程序内部的屏幕截图,不包括应用程序和任务栏外部的边缘。下面是我用来创建应用程序屏幕截图的代码

    private void captureScreenshot()
    {
        Rectangle bounds = this.Bounds;
        using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
        {
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
            }
            bitmap.Save("c:\\Users\\Brandon\\Downloads\\Test.jpg", ImageFormat.Jpeg);
        }
    }
我假设应用程序的边界并不完全是我想要的屏幕截图,因为它捕获了任务栏,稍微超出了应用程序的边缘

    private void captureScreenshot()
    {
        Rectangle bounds = this.Bounds;
        using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
        {
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
            }
            bitmap.Save("c:\\Users\\Brandon\\Downloads\\Test.jpg", ImageFormat.Jpeg);
        }
    }
下面是我得到的截图:

下面是我想要截屏的区域的图片(用黄色勾勒):


var bounds=this.RectangleToScreen(新矩形(Point.Empty,this.ClientSize));您必须声明您的应用程序,以及您最初尝试关闭的原因。避免JPEG对于包含文本的位图,PNG是最好的。您也可以使用Control.DrawToBitmap()方法,例如,这不需要表单处于焦点。看一看。他们正是你需要的解决方案。获取没有边框的窗体图像。无法按预期工作,他正在使用TransparencyKey属性。谢谢Hans Passant,您的解决方案工作得很好。我想我的应用程序一定已经知道dpi了,因为它只在我添加了你的代码后才工作。我之所以使用jpeg,是因为我将图像发送到谷歌,用机器学习进行分析,这是图像的唯一目的,因此它们需要小而不需要高质量。如果你愿意,你可以将你的评论作为答案发布,我会将其标记为正确。