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 for
MediaLibrary.SavePicture

传入的图像数据必须是JPEG文件格式。 此外,SavePicture始终将图像保存在JPEG文件中 格式


您从
Texture2D.GetData
获得的
byte[]
似乎不是那种格式,但我不知道如何转换它。

复制粘贴错误,抱歉。我试着像你们建议的那个样传递字节数组,从那个字节数组创建的内存流,但它不起作用,exeption被抛出到保存行。为什么你们的Texture.GetData字节数组的长度是1984000?如果纹理是800x420,它不是1344000吗?我再次失败,精确的尺寸是800x620,而不是800x420。我现在觉得有点尴尬。