Odd BitmapRegionDecoder java.io.IOException:不支持w / png和jpeg图像的图像格式

时间:2013-06-13 04:01:00

标签: bitmap

我不明白为什么我会收到此IO异常。它在文档"Throws IOException if the image format is not supported or can not be decoded.""he stream's position will be where ever it was after the encoded data was read. Currently only the JPEG and PNG formats are supported."中说我给它一个PNG,我甚至使用bitmapOptions.outMimeType;输出图像类型,它说image/png

代码:

    @Override
protected List<String> doInBackground(String... urlo) {
    List<String> savedKeys = new ArrayList<String>();
    InputStream inputStream = null;
    try {
        URL url = new URL("https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/280px-PNG_transparency_demonstration_1.png");
           HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
           inputStream = connection.getInputStream();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   



    BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
    bitmapOptions.inJustDecodeBounds = true;
    BitmapFactory.decodeStream(inputStream, null, bitmapOptions);
    int width = bitmapOptions.outWidth;
    int height = bitmapOptions.outHeight;
    String imageType = bitmapOptions.outMimeType;
    Debug.out(imageType);



    int block = 256;
    int count =0;
    BitmapRegionDecoder decoder = null;
    try {
        decoder = BitmapRegionDecoder.
            newInstance(inputStream, false);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Rect tileBounds = new Rect();
    // loop blocks
    for (int i=0; i<height; i+=block) {
        // get vertical bounds limited by image height
        tileBounds.top = i;
        int h = i+block<height ? block : height-i;
        tileBounds.bottom = i+h;
        tileBounds.right = 0;
        tileBounds.left = width;
        Debug.out(tileBounds.left+" "+tileBounds.right+" "+tileBounds.top+tileBounds.bottom);
            // load tile
        tile = decoder.decodeRegion(tileBounds, bitmapOptions);
        MainActivity.cache.put(key+count, tile);
          publishProgress();
          tile.recycle();
        savedKeys.add(key+count);

    }
    try {
        inputStream.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return savedKeys;

}

1 个答案:

答案 0 :(得分:1)

由于文件类型错误而没有抛出异常,但因为它不可读。

BitmapFactory.decodeStream(inputStream, null, bitmapOptions); 

这将“遍历”流,您的流对象不再从头开始。

解决方法是在此之后再次调用inputStream = connection.getInputStream();,以将流返回到其原始可读状态。