2013-10-24 68 views
0

問題出在方法Texture2D.SaveAsPng。我最近在這個方法中發現了memory leak類似的問題,但設法解決它。但我不能在這裏適應這個解決方案。我現在想要的是:如何正確保存texture2d到MediaLibrary wp7

 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內存泄漏只在窗口電話發生7.

UPD:從字節數組從Texture.GetData創建內存流長度爲1984000,當從存儲器Texture2D.SaveAsJpeg流的長度是141520.

回答

0

我不明白你爲什麼在textureData中複製紋理pic數據,但你從不使用它。
也許你需要做的:

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

UPDATE

根據MSDN爲MediaLibrary.SavePicture:傳遞在

圖像數據必須是一個JPEG文件格式。 此外,SavePicture總是將圖像保存爲JPEG文件 格式。

看來,你從Texture2D.GetData得到byte[]不是這種格式,但我不知道如何將它轉換。

+0

錯誤的複製粘貼,對不起。我試圖通過像你所建議的字節數組,但從該字節數組創建的內存流,但它沒有工作,exeption被拋出保存線。 – Feusp

+1

爲什麼從Texture.GetData的字節數組長度爲1984000?如果紋理是800x420不應該是1344000? – pinckerman

+0

我再次失敗,確切尺寸800x620而不是800x420。我現在感覺有點尷尬。 – Feusp