3

我正在使用 Writeablebitmap 截取 UI 元素的屏幕截图。代码如下所示:

    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() 方法的保存按钮,然后按下 Home 按钮以墓碑应用程序,最后按下 Back 按钮以恢复应用程序,我会看到一个屏幕显示“正在恢复...”,应用程序最终崩溃。做了一些调试后,我注意到错误似乎是由以下代码行引起的:

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 回答