3

UI 要素のスクリーンショットを撮るために Writeablebitmap を使用しています。コードは次のようになります。

    private void Screenshot(FrameworkElement element, String fileNameLoader)
    {
        try
        {
            WriteableBitmap bmp = new WriteableBitmap(element, null);

            MemoryStream ms = new MemoryStream();
            bmp.SaveJpeg(ms, (int)element.ActualWidth, (int)element.ActualHeight, 0, 100);
            ms.Seek(0, SeekOrigin.Begin);

            MediaLibrary lib = new MediaLibrary();
            String filePath = string.Format(fileNameLoader);
            lib.SavePicture(filePath, ms);                
         }
        catch (Exception exception)
        {
            txtDebug.Text = "There was an error. Could not save. " + exception.ToString();
        }
    }

私が抱えている問題は、Screenshot() メソッドを呼び出す保存ボタンを押してから、ホーム ボタンを押してアプリを削除し、最後に [戻る] ボタンを押してアプリを元に戻すと、「再開しています」という画面が表示されることです。 ...」と表示され、最終的にアプリがクラッシュします。デバッグを行った後、次のコード行が原因でエラーが発生しているように見えることに気付きました。

WriteableBitmap bmp = new WriteableBitmap(element, null);

その行を次のように置き換えます。

    WriteableBitmap bmp = null;

クラッシュから私を救いますが、私のアプリは意図したとおりに機能しません (スクリーンショットは機能しません)。

誰かがこの問題に遭遇したことがありますか、またはそれを修正する方法を知っていますか? 特定の UI 要素のスクリーンショットを撮ることができる限り、どのような回避策も受け入れます。

4

1 に答える 1

1

エラーを再現できませんが、これを試すことができます:

private void Screenshot(FrameworkElement element, String fileNameLoader)
{
    WriteableBitmap bmp = new WriteableBitmap(element, null);
    using (MemoryStream ms = new MemoryStream())
    {
        bmp.SaveJpeg(ms, (int)element.ActualWidth, (int)element.ActualHeight, 0, 100);
        ms.Seek(0, SeekOrigin.Begin);
        using (MediaLibrary lib = new MediaLibrary())
        {
            String filePath = string.Format(fileNameLoader);
            lib.SavePicture(filePath, ms);
        }
    }
}
于 2012-04-19T09:44:00.230 に答える