问题在于方法Texture2D.SaveAsPng。我最近在类似的问题中找到了memory leak这个方法,但设法解决了它。但我不能在这里解决这个问题。我现在正在尝试的是:
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.
答案 0 :(得分:0)
我不明白为什么你在pic
中复制了纹理textureData
数据但你永远不会使用它。
也许你需要这样做:
byte[] textureData = new byte[4 * picHeight * picWidth];
pic.GetData(textureData);
library.SavePicture(path, textureData);
<强>更新强>
根据MediaLibrary.SavePicture
的MSDN:
传入的图像数据必须是JPEG文件格式。 此外,SavePicture始终将图像保存为JPEG文件 格式。
您从byte[]
获得的Texture2D.GetData
似乎不是那种格式,但我不知道如何转换它。