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 に答える