[英]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.