C# 如何正确地将texture2d保存到MediaLibrary wp7
问题在于方法。我最近在这个方法中发现了类似的问题,但还是设法解决了。但我不能把这个解决方案放在这里。我现在尝试的是:C# 如何正确地将texture2d保存到MediaLibrary wp7,c#,windows-phone-7,xna,C#,Windows Phone 7,Xna,问题在于方法。我最近在这个方法中发现了类似的问题,但还是设法解决了。但我不能把这个解决方案放在这里。我现在尝试的是: MediaLibrary library = new MediaLibrary(); MemoryStream ms = new MemoryStream(); pic.SaveAsJpeg(ms, pic.Width, pic.Height); ms.Seek(0, SeekOrigin.Begin);
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
,但它抛出的值不在预期范围内
异常
byte[] textureData = new byte[4 * picHeight * picWidth];
pic.GetData(textureData);
library.SavePicture(path, textureData); //exception on this line
所以,我想,我需要在字节数组中转换Texture2D
,这样library.SavePicture(path,ms)
就不会抛出异常,但我不知道该怎么做。任何帮助都将不胜感激
注意:仅在windows phone 7上发生Texture2D.SaveAsJpeg中的内存泄漏
Upd:从Texture.GetData
的字节数组创建的内存流长度是1984000,而Texture2D.SaveAsJpeg
的内存流长度是141520。我不明白为什么你在textureData
中复制了纹理pic
数据,但你从未使用过它。
也许你需要做:
byte[] textureData = new byte[4 * picHeight * picWidth];
pic.GetData(textureData);
library.SavePicture(path, textureData);
更新
根据MSDN forMediaLibrary.SavePicture
:
传入的图像数据必须是JPEG文件格式。
此外,SavePicture始终将图像保存在JPEG文件中
格式
您从Texture2D.GetData
获得的byte[]
似乎不是那种格式,但我不知道如何转换它。复制粘贴错误,抱歉。我试着像你们建议的那个样传递字节数组,从那个字节数组创建的内存流,但它不起作用,exeption被抛出到保存行。为什么你们的Texture.GetData字节数组的长度是1984000?如果纹理是800x420,它不是1344000吗?我再次失败,精确的尺寸是800x620,而不是800x420。我现在觉得有点尴尬。