Android 有没有办法提高BitmapFactory.decodeStream()的速度?
显然,这是一个昂贵/耗时的操作。有什么办法可以改进吗Android 有没有办法提高BitmapFactory.decodeStream()的速度?,android,Android,显然,这是一个昂贵/耗时的操作。有什么办法可以改进吗 Bitmap bm = BitmapFactory.decodeStream((InputStream) new URL( someUrl).getContent()); 我猜真的没有办法避免这种相对激烈的操作,但我想看看是否有人有任何他们可以推荐的调整(除了缓存实际位图,不管出于什么原因,它在这里根本不相关)如果你不需要全分辨率,你可以让它只读取第n个
Bitmap bm = BitmapFactory.decodeStream((InputStream) new URL(
someUrl).getContent());
我猜真的没有办法避免这种相对激烈的操作,但我想看看是否有人有任何他们可以推荐的调整(除了缓存实际位图,不管出于什么原因,它在这里根本不相关)如果你不需要全分辨率,你可以让它只读取第n个像素,其中n是2的幂。通过在传递给
BitmapFactory.decodeFile
的对象上设置inSampleSize
,可以实现此目的。通过在Options
对象上设置inJustDecodeBounds
,只需第一次读取文件中的元数据,就可以找到样本大小。除此之外——不,我不认为有一种简单的方法可以比现在更快
编辑,例如:
Options opts = new Options();
// Get bitmap dimensions before reading...
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, opts);
int width = opts.outWidth;
int height = opts.outHeight;
int largerSide = Math.max(width, height);
opts.inJustDecodeBounds = false; // This time it's for real!
int sampleSize = ??; // Calculate your sampleSize here
opts.inSampleSize = sampleSize;
Bitmap bmp = BitmapFactory.decodeFile(path, opts);
谢谢!您能否详细说明一下“您可以通过在Options对象上设置inJustDecodeBounds来在第一次通过时读取文件中的元数据,从而找到样本大小”这一点?也许有一个例子?我添加了一个代码例子。如果样本大小为2,则宽度和高度将减半。如果它是4,那么它将是第四个,以此类推。结果是:(大部分来自费多尔弗拉索夫。懒汉)