Как загрузить высокое разрешение изображения Windows Phone Taskagent? [недостаточно памяти]

Как известно, в агенте задач Windows Phone 8 можно использовать только 11,5 МБ памяти. Я пытался сделать динамическое изображение экрана блокировки в агенте фоновой задачи. Когда я получаю изображение 480 * 800, оно работает нормально, но когда я изменяю его на 768*1280, я делаю исключение:

Недостаточно памяти

1 пиксель литой 4 K

так

(480 * 800 * 4) /1024/1024=1.46M

(768*1280 * 4) / 1024/1024 = 3,75 М

Когда я попытался преобразовать byte[] в BitmapImage:

public BitmapImage ConvertDownloadStringToStream(byte[] downloadImageBytes)
{
    if (!(downloadImageBytes.Length > 0))
        return null;

    RationImageInfo currentRationInfor = GetBitmapImageWidthByDeveiceRatio();
    BitmapImage convertBitmapImage = new BitmapImage() { DecodePixelWidth =768, DecodePixelHeight = 1280};

    using (MemoryStream imageStream = new MemoryStream(downloadImageBytes))
    {
        convertBitmapImage.SetSource(imageStream);//out of memory        
    }          

    return convertBitmapImage;
}

Я получаю исключение нехватки памяти в SetSource() метод. У кого-нибудь есть предложения по этому поводу?

2 ответа

Решение

Я предполагаю, что память складывается.

Попробуйте сохранить его в файл, освободите переменную / ресурс, а затем загрузите его из файла, используя параметр конструктора.

Просто попробуйте несколько раз, я был исправить эту проблему. Как вы видите, только 11M памяти можно использовать в Windows Phone Taskagent. я пытался сделать динамический экран блокировки фона. Мое решение - скачать изображение со стороны сервера и сохранить его для локального отображения.

почему из памяти вылезло исключение?

скачать изображение Byte[]=> Записать в память => построить writeableBitmap с 768*1280.

одно и то же изображение запоминается только три раза.

так как это исправить?

когда вы загружаете свое изображение со стороны сервера. Вы должны немедленно сохранить в локальном изолированном хранилище и очистить использование памяти для байта изображения []. просто установите URL-адрес изображения на экран блокировки. надо работать.

скачать изображение Byte[]=> Сохранить в локальную => очистить память байта изображения.

Все отлично.

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