如何捕捉透视面板后面的屏幕

时间:2016-07-21 23:18:42

标签: c# winforms

我有一个表单,其中包含panel1panel1绿色背景,表单TransparencyKey也设置为绿色,现在代替面板,它背后显示的是什么。所以我添加了一个按钮并添加了这个代码来捕获我在面板中看到的屏幕:

Bitmap bmp = new Bitmap(panel1.Width, panel1.Height);
panel1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save(@"F:\Image.bmp");
MessageBox.Show("Save Complete!");

但保存的图像仅为绿色!有什么方法可以保存屏幕上panel1背后显示的内容吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Graphics.CopyFromScreen方法获取屏幕截图。这是一个方法,可以帮助您获取屏幕给定边界的屏幕截图:

public Bitmap GetDesktopImage(Rectangle bounds)
{
    var bm = new Bitmap(bounds.Width, bounds.Height);
    using (Graphics g = Graphics.FromImage(bm))
    {
        g.CopyFromScreen(bounds.Location, new Point(0, 0), bounds.Size);
    }
    return bm;
}

然后它足以将面板的屏幕边界传递给方法。要获取面板的屏幕范围,您可以将其Bound属性传递给RectangleToScreenParent方法:

var bounds = panel1.Parent.RectangleToScreen(panel1.Bounds);
var image = GetDesktopImage(bounds);
//image.Save(@"d:\bm.png", System.Drawing.Imaging.ImageFormat.Png);