如何加载高分辨率图像windows phone taskagent? [内存不足]

时间:2013-12-10 10:12:10

标签: windows-phone-8 lockscreen

众所周知,Windows Phone 8任务代理只能使用11.5MB内存。我试图在后台任务代理中制作动态锁屏图像。当我得到480 * 800图像时,它工作正常,但当我将其更改为768 * 1280时我是例外:

  

内存不足

1像素投射4 K

所以

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

(768 * 1280 * 4)/ 1024/1024 = 3.75M

当我尝试将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 个答案:

答案 0 :(得分:2)

我猜测内存会增加。

尝试将其保存到文件中,释放变量/资源,而不是使用构造函数参数从文件加载它。

答案 1 :(得分:0)

尝试了很多次我一直在解决这个问题。 如你所见,它只有11M内存可以在windows phone taskagent中使用。我想要动态锁屏背景。我的解决方案是从服务器端下载图像并保存到本地显示它。

为什么会出现内存异常?

下载图片Byte [] =>写入内存=>使用768 * 1280构建writeableBitmap。

相同的图像记忆只投了三次。

所以如何解决?

从服务器端下载图像时。你应该立即保存到本地隔离存储并清除关于图像字节[]的内存使用情况。只需将图片网址设置为锁屏即可。得到了工作。

下载图片字节[] =>保存到local =>清除图像字节内存。

一切都很好。