【问题标题】:Capture Screen But Not Current Form In C#?在 C# 中捕获屏幕但不是当前形式?
【发布时间】:2012-04-05 08:29:24
【问题描述】:

我想捕获屏幕但没有当前表单,我尝试最小化 -> 捕获 -> 最大化,但如果存在,我正在寻找更好的解决方案。这是我的代码::

    int w = this.Width;
    int h = this.Height;
    Size sz = this.Size;
    Point loc = this.Location;

    this.WindowState = FormWindowState.Minimized;

    System.Threading.Thread.Sleep(500);

    using (Bitmap b = new Bitmap(w, h))
    {
        using (Graphics g = Graphics.FromImage(b))
        {
            g.CopyFromScreen(loc, new Point(0, 0), sz);
        }

        b.Save(Environment.CurrentDirectory + "\\slides\\screen.jpeg");

        this.BackgroundImage = System.Drawing.Image.FromFile(@"slides\screen.jpeg");
    }

    this.WindowState = FormWindowState.Maximized;

我问是否有直接的方法将捕获的图像作为表单背景而不保存。

【问题讨论】:

  • 只需在设计器中将表单的不透明度设置为99,您不必隐藏它。不是功能,是错误。
  • @Hans 这就是我在 Vista 上所做的并且对(不透明度
  • 没关系,我解决了。与在 Win 7 PC 上启用 Aero 有关;故事的寓意:截屏时禁用 Aero(Aero = 无用功能)

标签: c# screen-capture


【解决方案1】:
  1. 将表单Opacity 设置为0。

    这将使表单完全透明,因此不可见。

  2. 使表单不可见。将 Visible 属性设置为 `false。

    这将隐藏表单而不改变其状态,尽管在 XP 上这不会使窗口立即消失。

【讨论】:

  • 只需将其设置为 99,这样它就不会不可见 :) 将 Visible 设置为 false 实际上不起作用,您仍然可以在 XP 上看到它。直到所有其他重叠的窗口都赶上他们的绘画。
【解决方案2】:

试试吧,虽然我确实注意到你的和我的都被表单边框稍微偏移了。

    int w = this.Width; 
    int h = this.Height; 
    Size sz = this.Size; 
    Point loc = this.Location; 
    Hide();
    System.Threading.Thread.Sleep(500);
    using (Image b = new Bitmap(w, h)) 
    { using (Graphics g = Graphics.FromImage(b)) 
    { 
        g.CopyFromScreen(loc, new Point(0, 0), sz); }

        Image x = new Bitmap(b);
        this.BackgroundImage = x;
    } 
    Show();

【讨论】:

  • 你应该记录下为什么 500 是一个特殊的数字。比314好吗?
  • 我相信他在使用 500 来确保有足够的时间让动画发生,因为我没有尝试并拿到表格,100 显示它变暗了..
猜你喜欢
  • 2016-12-17
  • 2012-04-19
  • 2014-05-09
  • 2010-10-17
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
相关资源
最近更新 更多