1

画面をキャプチャしたいのですが、現在のフォームがなければ、最小化 -> キャプチャ -> 最大化しようとしましたが、より良い解決策があれば探しています。これは私のコードでした::

    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;

そして、キャプチャした画像を保存せずにフォームの背景として配置する直接的な方法があるかどうかを尋ねます。

4

2 に答える 2

4
  1. フォームOpacityを0に設定します。

    これにより、フォームが完全に透明になり、表示されなくなります。

  2. フォームを非表示にします。Visibleプロパティを`falseに設定します。

    これにより、状態を変更せずにフォームが非表示になりますが、XPではウィンドウがすぐに消えることはありません。

于 2012-04-05T08:33:16.283 に答える
1

あなたと私の両方がフォームの境界線によってわずかにオフセットされていることに気付きましたが、試してみてください。

    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();
于 2012-04-05T09:00:38.870 に答える