WP8 WriteableBitmap конструктор сохраняет много памяти
Я пытаюсь использовать объект WriteableBitmap, потому что он мне нужен для поворота изображений и сохранения изображений в изолированном хранилище моего приложения.
Проблема в том, что он использует столько памяти, что в итоге вызывает исключение нехватки памяти.
Вот изображение использования памяти моего приложения, ссылка на изображение здесь для лучшего просмотра.
Вот пример того, где я использую WriteableBitmap:
WriteableBitmap picture = new WriteableBitmap(PictureCanvas, null);
using (var memoryStream = new MemoryStream())
{
picture.SaveJpeg(memoryStream, picture.PixelWidth, picture.PixelHeight, 0, 100);
using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(Globals.OVERLAY_FILE_NAME, FileMode.Create, myIsolatedStorage))
{
fileStream.Write(memoryStream.ToArray(), 0, memoryStream.ToArray().Length);
fileStream.Close();
}
}
}
picture = picture.Crop(0, 0, 1, 1);
Я пытаюсь обрезать изображение, чтобы оно занимало меньше памяти, но это ничего не делает.
Я использую здесь библиотеку расширений WriteableBitmap, и на первой странице она упоминает метод Dispose(), но я не вижу его в своем приложении.
Если кто-то может сказать мне, как обойти эту проблему или указать мне куда-нибудь, я могу найти возможное решение, это было бы здорово!
1 ответ
У меня похожая проблема, и я все еще занимаюсь ее расследованием, но могу дать хотя бы небольшой совет: по возможности избавьтесь от MemoryStream и напишите непосредственно в fileStream следующим образом:
WriteableBitmap picture = new WriteableBitmap(PictureCanvas, null);
using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(Globals.OVERLAY_FILE_NAME, FileMode.Create, myIsolatedStorage))
{
picture.SaveJpeg(fileStream, picture.PixelWidth, picture.PixelHeight, 0, 100)
}
Это должно купить вам немного памяти.