0

问题出在方法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时。

4

1 回答 1

0

我不明白你为什么复制纹理pic数据textureData但你从不使用它。
也许你需要这样做:

byte[] textureData = new byte[4 * picHeight * picWidth];
pic.GetData(textureData);
library.SavePicture(path, textureData); 

更新

根据 MSDN MediaLibrary.SavePicture

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

看起来byte[]你得到Texture2D.GetData的不是那种格式,但我不知道如何转换它。

于 2013-10-25T01:21:34.270 回答