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)
    }

Это должно купить вам немного памяти.

Другие вопросы по тегам