1

メソッドTexture2d.SaveAsPng()で奇妙な問題が見つかりまし た。呼び出しごとに 1.5mb が消えます。このメソッドを使用して、テクスチャを分離ストレージに保存します

public static void SaveTextureToISF(string fileName, Texture2D texture)
        {
            using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (
                    IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(fileName, FileMode.Create, file)
                    )
                {
                    texture.SaveAsPng(fileStream, texture.Width, texture.Height);
                    fileStream.Close();
                }
            }
        }

大量のテクスチャを保存する必要があり、大量のメモリ リークが発生しています。Windows Phone 8 デバイスではすべて正常に動作しますが、この問題は Windows Phone 7 でのみ発生します。

4

2 に答える 2

0

byteテクスチャ データを配列で取得し、 Isolated Storageに保存することで問題を解決しました。

public static void SaveTextureToISF(string fileName, Texture2D texture)
{
    byte[] textureData = new byte[4 * texture.Width * texture.Height];
    texture.GetData(textureData);
    Save(fileName, textureData); //saving array to IS
}

テクスチャが必要な場合は、byteストレージから配列をロードし、このデータを新しいテクスチャにロードします。

 public static Texture2D LoadTextureFromISF(string fileName, int width, int height)
 {
     Texture2D texture = new Texture2D(GraphicsDevice, width, height);
     byte[] textureData = Load(fileName); //load array from IS
     texture.SetData(textureData);
     return texture;
 }

ストレージからテクスチャをロードするときは、保存されたテクスチャのサイズを正確に把握し、それをロード関数のパラメータとして渡す必要があります。これは簡単に変更できますが、その必要はありません。

于 2013-10-15T06:26:47.697 に答える