1

所以我在我的 WP8 应用程序中的 PhoneApplicationPage 中有一个 DrawingSurfaceBackgroundGrid;我想截图。据我所知(来自谷歌),没有简单的“截屏”调用。人们正在做的是使用 WriteableBitmap,如下所示:

WriteableBitmap wbmp = new WriteableBitmap(test, null);
wbmp.SaveJpeg(isoStream2, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100);

我已经尝试过作为 DrawingSurfaceBackgroundGrid 和 PhoneApplicationPage 进行测试。这些都不适合我。这可能与我使用 RenderTargets 和像素着色器(在 SharpDX 中)渲染所有内容有关吗?我只是得到一个黑色的图像。这是保存图像的代码:

IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();

using (IsolatedStorageFileStream isoStream2 = new IsolatedStorageFileStream("new.jpg", FileMode.OpenOrCreate, isoStore))
{
    WriteableBitmap wbmp = new WriteableBitmap(test, null);
    wbmp.SaveJpeg(isoStream2, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100);
}

但就像我说的,它只是创建了一个黑色图像。

有任何想法吗?

4

2 回答 2

0

除了在我的应用程序中将“test”更改为根网格的名称外,按原样尝试了您的代码x:Name="LayoutRoot",并且工作正常!只需将test替换为您要捕获的元素、整个页面的根网格名称或仅该元素的子元素名称。


顺便说一句,感谢您的代码,还有一个要松鼠。

于 2013-01-30T20:27:52.277 回答
0

我正在使用下面的代码。虽然它正在保存到媒体库。

WriteableBitmap bmpCurrentScreenImage = new WriteableBitmap((int)this.ActualWidth, (int)this.ActualHeight);
bmpCurrentScreenImage.Render(LayoutRoot, new MatrixTransform());
bmpCurrentScreenImage.Invalidate();
using (var stream = new MemoryStream())
{
    // Save the picture to the Windows Phone media library.
    bmpCurrentScreenImage.SaveJpeg(stream, bmpCurrentScreenImage.PixelWidth, bmpCurrentScreenImage.PixelHeight, 0, quality);
    stream.Seek(0, SeekOrigin.Begin);

    var picture = new MediaLibrary().SavePicture(name, stream);
    return picture.GetPath();
}
于 2017-05-03T13:44:25.923 回答