Android位图解码问题

时间:2011-07-26 16:14:43

标签: android bitmap decode

我在使用XML从服务器检索的文件时遇到问题。

位图(GIF)是base64编码的,然后作为字符串放在XML中。 应用程序获取此字符串,将其解码为位图,然后显示它。

它在大多数情况下工作正常,但有时BitmapFactory.decodeByteArray返回null,没有任何问题的迹象。

我已将其中一个通过XML失败的文件(它可重复!)复制为资源,并且工作正常。

    bMapArray = Base64Coder.decode(cd.image); // Decode the encoded string
    bMap = BitmapFactory.decodeResource(getResources(), R.drawable.fail);
    Log.e("config", bMap.getConfig().name());
    // shows RGB_565, decodes OK and will display
    bMap = BitmapFactory.decodeByteArray(bMapArray, 0, bMapArray.length);           
    Log.e("config", bMap.getConfig().name());           
    // Null config and displays OK for some files, 
    // Fails decodeByteArray for the file matching the one used as a resource and some others

我花了好几天时间试图找出问题并没有成功。有没有人有一个好主意? 我很高兴接受这是64位编码/解码过程的问题,但是没有来自decodeByteArray的错误我不知道是什么。

干杯,

马丁。

2 个答案:

答案 0 :(得分:0)

我有一个从各种网站下载位图的应用程序 - 其中没有一个是base64编码的。大多数时候位图通过decodeByteArray就好了,但是不时地(例如默认的Facebook个人资料图标)我得到了null。

我花了很多时间试图弄清楚发生了什么,最后得出结论(你也怀疑)这是在decodeByteArray中处理GIF的一个错误。

如果你在这里(以及其他地方)搜索“android bitmap gif decodebytearray”,你可以找到许多其他人都有同样问题的提示 - 但我还没有找到一份授权错误报告。

答案 1 :(得分:0)

这里有三个非常明显的问题可能会出错。

1)在发送之前将图像添加到XML的方式 - 检查它是否正确编码

2)传输过程 - 确保传输没有被截断,尤其是缓冲输入流

3)从收到的XML中解析数据 - 再次检查字符串是否已正确解析出来。

最有可能的候选人是传播。图像的大小是否会影响您看到的结果?如果仅收到部分数据,它将失败。