問題はメソッドTexture2D.SaveAsPngにあります。私は最近、同様の問題でこのメソッドのメモリリークを発見しましたが、なんとか解決しました。しかし、私はその解決策をここに当てはめることはできません。私が今試しているのは:
MediaLibrary library = new MediaLibrary();
MemoryStream ms = new MemoryStream();
pic.SaveAsJpeg(ms, pic.Width, pic.Height);
ms.Seek(0, SeekOrigin.Begin);
library.SavePicture(path, ms);
ms.Close();
また、呼び出しごとに約 4 MB のメモリ (テクスチャ ディメンション 800x620) が失われます。MemoryStream
バイト配列から作成しようとしましたが、Value does not fall within the expected range
例外がスローされます。
byte[] textureData = new byte[4 * picHeight * picWidth];
pic.GetData(textureData);
library.SavePicture(path, textureData); //exception on this line
Texture2D
したがって、例外がスローされないようにバイト配列に変換する必要があると思いlibrary.SavePicture(path, ms)
ますが、その方法がわかりません。どんな助けでも大歓迎です。
注:でのメモリ リークはTexture2D.SaveAsJpeg
、Windows Phone 7 でのみ発生します。
Upd:バイト配列 from から作成されるメモリ ストリームの長さTexture.GetData
は 1984000 ですが、メモリ ストリーム from の長さ Texture2D.SaveAsJpeg
は 141520 です。