拍摄我的控件的屏幕截图 - Winform

时间:2014-10-08 13:13:21

标签: c# winforms

我想在Winform上截取我的控件截图。我使用此功能 - 在此站点中找到:

    public void GetImage()
    {
        var bm = new Bitmap(display1.Width, display1.Height);
        display1.DrawToBitmap(bm, display1.ClientRectangle);
        bm.Save(@"c:\whatever.gif", ImageFormat.Gif);
    }

但是当我使用它时,我在System.Drawing.dll中有一个关于'System.Runtime.InteropServices.ExternalException'的错误:GDI +中发生了一般错误。

你有任何想法吗? 谢谢!

---------------------- EDIT ------------------------ ---

好的,我改变了我的功能:

    public void GetImage()
    {
        var bm = new Bitmap(display1.Width, display1.Height);
        display1.DrawToBitmap(bm, display1.ClientRectangle);
        var dlg = new SaveFileDialog { DefaultExt = "png", Filter = "Png Files|*.png" };
        var res = dlg.ShowDialog();
        if (res == DialogResult.OK) bm.Save(dlg.FileName, ImageFormat.Png);
    }

它有效,但我现在有一张空白的照片:/

1 个答案:

答案 0 :(得分:0)

尝试以下方法: 假设display1是一个Rectangle,它限定了你想要捕获的显示区域。

    public void GetImage()
    {
        Rectangle display1 = this.Bounds; // winforms control bounds
        // for full screen use "= Screen.GetBounds(Point.Empty);

        var bm = new Bitmap(display1.Width, display1.Height);
        //display1.DrawToBitmap(bm, display1.ClientRectangle);

        Graphics g = Graphics.FromImage(bm);
        g.CopyFromScreen(new Point(display1.Left, display1.Top), Point.Empty, display1.Size);

        var dlg = new SaveFileDialog { DefaultExt = "png", Filter = "Png Files|*.png" };
        var res = dlg.ShowDialog();
        if (res == DialogResult.OK) bm.Save(dlg.FileName, ImageFormat.Png);
    }