Как загрузить высокое разрешение изображения 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[]=> Сохранить в локальную => очистить память байта изображения.
Все отлично.