[英]How correctly to save texture2d to MediaLibrary wp7
问题出在方法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上。
UPD:从字节数组从创建的存储器流长度Texture.GetData
是1984000,当从存储器流的长度Texture2D.SaveAsJpeg
是141520。
我不明白为什么您将纹理pic
数据复制到textureData
但从未使用过。
也许您需要做:
byte[] textureData = new byte[4 * picHeight * picWidth];
pic.GetData(textureData);
library.SavePicture(path, textureData);
更新
根据MSDN的MediaLibrary.SavePicture
:
传入的图像数据必须为JPEG文件格式。 此外,SavePicture始终将图像保存为JPEG文件格式。
从Texture2D.GetData
获得的byte[]
似乎不是这种格式,但是我不知道如何转换它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.