问题出在方法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();
而且,每次调用我都会丢失大约 4mb 的内存(纹理尺寸 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 上。
更新:从字节数组创建的内存流长度Texture.GetData
为1984000,当内存流的长度 Texture2D.SaveAsJpeg
为141520时。