将GIF数据分配给Bitmap对象

时间:2012-08-23 21:33:42

标签: android graphics bitmap

我在很多地方都读过Android没有本机gif支持。结果,我的代码在BitmapFactory.decodeByteArray失败了。这是我的代码:

URL url = new URL(imgURL); //you can write here any link
HttpURLConnection ucon = (HttpURLConnection)url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);          

ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
  while ((current = bis.read()) != -1) {
  baf.append((byte) current);
}

image = BitmapFactory.decodeByteArray(baf.toByteArray(), 0, baf.toByteArray().length);

使用调试器我确认标头数据已正确加载并且是GIF格式的。但是一旦解码函数运行,我就会留下空值。我的第一个猜测是我需要做一个GIF - > PNG转换。我怎样才能做到这一点?还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

http://code.google.com/p/android-gifview/的GifView课程效果很好。该项目适用于GIF动画,但它也适用于静态GIF。

答案 1 :(得分:0)

因此,尽管Android抱怨GIF并解码失败,我认为该问题存在于我的代码中的其他失败中。我所做的更改导致代码现在正常工作。

  1. 确保我关闭了输入流
  2. 删除了可能导致无限循环和线程生成的事件(这是我的解析规则失败,从HTML源中删除了GIF文件列表)
  3. 确保我在Bitmap对象中的List文件的存储始终在使用前正确投放。
  4. 我通过this posting找到了帮助和详细信息,这是一个几乎相同的问题。关于这个问题有一些链接。

    最后我根本没有触摸我的Bitmap或InputStream对象,数据正在被正确接收(根据我对GIF头字节的确认)但是使用失败了之后的数据。