我在Windows Phone 7相機app.I需要轉換捕獲流工作,使用EXIF幫助解決它旋轉並保存爲質量,方向,輸出尺寸JPEG parameters.I其次exif rotation文章修復旋轉。但核心問題是我需要首先將流解碼爲jpeg,然後執行上述的旋轉修復以將圖片保存到媒體庫。內存問題在WP7
我使用以下代碼:
private WriteableBitmap DecodeImage(Stream photo, int angle)
{
WriteableBitmap source = PictureDecoder.DecodeJpeg(photo);
photo.Seek(0, SeekOrigin.Begin);
System.GC.Collect();
UiDispatcher.BeginInvoke(() =>
{
MessageBox.Show(App.LogMemory("after decode"));
});
switch (angle)
{
case 90:
case 270:
return RotateBitmap(source, source.PixelHeight,
source.PixelWidth, angle);
case 180:
return RotateBitmap(source, source.PixelWidth,
source.PixelHeight, angle);
default:
return source;
}
return null;
}
在RotateBitMap方法我有旋轉邏輯在鏈接中指定,但它從源創建一個新的 WritableBitmap對象如下:
WritablBitmap target = new WritableBitmap(soure.width,source.height); //source is the bitmap passed in argument.
問題是
PictureDecoder.decodejpeg - 爲我的相機拍攝的流爲30MB拍攝流 和創建旋轉流方法中的新位圖耗用30 MB以上。導致60 MB應用程序內存的加速。
這是造成應用程序崩潰由於在下端(256MB)視窗電話設備存儲器。 爲什麼解碼JPEG取30MB和30MB流的旋轉。(我試過源和目標在旋轉流的方法,位圖設置爲null,強制GC,但沒有use.Applications的幾乎沒有得到devices.How 60MB我可以應付了這個要求??
任何想法。如何優化內存的消耗在這些情況下???
注:我需要從rotatestream方法,結果,可以採取位圖,因爲我需要使用位圖保存爲JPEG與輸出尺寸,質量