【问题标题】:Get bitmap from input stream and resize从输入流中获取位图并调整大小
【发布时间】:2014-01-07 06:42:53
【问题描述】:

我想从输入流中获取位图,然后重新调整它的大小。但我得到了错误。

如果我不重新调整大小就返回,它可以正常工作。

有人可以帮忙吗?

LOGCAT:

01-07 01:38:33.412: D/skia(1307): --- SkImageDecoder::Factory returned null

代码:

private Bitmap getBitmap(String url)
{
    try {
        Bitmap bitmap=null;
        URL imageUrl = new URL(url);

        HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
        conn.setConnectTimeout(10000);
        conn.setReadTimeout(10000);
        conn.setDoInput(true);
        conn.setInstanceFollowRedirects(true);
        conn.connect();
        InputStream is=conn.getInputStream();

        //return BitmapFactory.decodeStream(is); // THIS WORKS FINE
        bitmap = decodeFile(is);
        is.close();
        return bitmap; 
    } catch (Exception ex){
       return null;
    }
}

private Bitmap decodeFile(InputStream istream){
    BufferedInputStream is = new BufferedInputStream(istream);
    try {
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(is,null,o);

        final int REQUIRED_SIZE=60;
        int height_tmp=o.outHeight;
        int scale=1;
        while(true){
            if(height_tmp/2<REQUIRED_SIZE)
                break;
            height_tmp/=2;
            scale*=2;
        }

        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
        Log.d("insample", "aa: "+scale);
        return BitmapFactory.decodeStream(is, null, o2);
    } catch (Exception e) {
        Log.d("aaa","aa: "+e);
    } finally{
        try {
            is.close();
        } catch( IOException ignored ) {}
    }
    return null;
}

【问题讨论】:

  • 检查this答案。
  • 实际上我之前尝试过并得到 IOException(如果我重置 InputStream)或“Mark Invalidated”错误(如果我重置 bufferinputstream)......所以我检查了 markSupported(),发现它是错误的。但不知道如何标记它.....通过 32K 或 8K 或什么?
  • 查看该人对this问题的评论。
  • 我不认为这是我的问题,就好像我直接从 getBitmap 方法返回 BitmapFactory.decodeStream(is) 一样,它可以工作....如果我尝试在 decodeFile 中调整它的大小,我的问题就会出现() 方法。
  • 为了测试,可以使用BitmapFactory.decodeStream(is,null,null);如果图像被解码则意味着BitmapFactory.Options不适合图像。尝试使用不同的选项设置。

标签: android bitmap


【解决方案1】:

iv.setImageResource(resId);

resId 是无效值...

改成

iv.setImageResource(R.drawable.ic_launcher);

并测试代码

【讨论】:

  • 抱歉,我们在同一页吗?
  • 与 OP 的问题无关。完全错误
  • 完全不同的答案。
猜你喜欢
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多