2

WPF で記述されたアプリケーションのスクリーンショットを撮ろうとしましたが、アプリケーションがキャプチャされません。スクリーンショットを撮るには特別なツールを使用する必要がありますか?

4

3 に答える 3

6

RenderTargetBitmapを使用して、WPF コントロールから画像を生成できます。

    public const int IMAGE_DPI = 96;

    public Image GenerateImage(T control)
        where T : Control, new()
    {
        Size size = RetrieveDesiredSize(control);

        Rect rect = new Rect(0, 0, size.Width, size.Height);

        RenderTargetBitmap rtb = new RenderTargetBitmap((int)size.Width, (int)size.Height, IMAGE_DPI, IMAGE_DPI, PixelFormats.Pbgra32);

        control.Arrange(rect); //Let the control arrange itself inside your Rectangle
        rtb.Render(control); //Render the control on the RenderTargetBitmap

        //Now encode and convert to a gdi+ Image object
        PngBitmapEncoder png = new PngBitmapEncoder();
        png.Frames.Add(BitmapFrame.Create(rtb));
        using (MemoryStream stream = new MemoryStream())
        {
            png.Save(stream);
            return Image.FromStream(stream);
        }
    }

    private Size RetrieveDesiredSize(T control)
    {
        if (Equals(control.Width, double.NaN) || Equals(control.Height, double.NaN))
        {
            //Make sure the control has measured first:
            control.Measure(new Size(double.MaxValue, double.MaxValue));

            return control.DesiredSize;
        }

        return new Size(control.Width, control.Height);
    }

これにより PNG 画像が生成されることに注意してください ;) JPEG として保存する場合は、別のエンコーダーを使用することをお勧めします :)

Image image = GenerateImage(gridControl);
image.Save("mygrid.png");
于 2009-08-17T11:24:51.937 に答える
1

PrtScrボタンを押すだけで(Windowsはデスクトップイメージ全体をバッファにコピーします)、Power Pointに貼り付けて、必要に応じてトリミングします。

于 2012-01-26T13:18:13.667 に答える
0

私は同じ問題を抱えています。テストを文書化するためにスクリーンショットを撮る必要がありますが、そこに到達できないようです。

問題のウィンドウは、丸みを帯びた角/透明度が許可されたボーダレス モーダル ウィンドウです。これが私のレポートです:

  • HP Quality Center のスクリーンショット ツールはそれをウィンドウとして認識しないため、ウィンドウが存在しないかのようにスクリーンショットを撮影します。
  • SnagIt は、キーコンボを使用してキャプチャ モードに入ります。ストロークがヒットすると、ポップアップは消えます。キャプチャが終了すると再び表示されます。
  • 標準の Windows キャプチャは正常に機能し (Alt + Prt Scr)、意図したとおりにウィンドウをキャプチャします。

次に試したのは、開いたドロップダウンリストでウィンドウをキャプチャすることでした。上記のアプローチはどれも機能していないようです (最後のアプローチは、開いているドロップダウンなしで、以前と同じ方法でウィンドウをキャプチャします)。

私がすべての話を正しく理解している限り、あなたができる唯一のことは、これをアプリケーションに実装することです...

于 2011-03-09T08:03:33.583 に答える