【发布时间】: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不适合图像。尝试使用不同的选项设置。