我打算编写一个小图库应用程序。 所以我有一个带有图像的gridview,并且存储了显示的图像 在本地设备上。 我得到的是一个类ImageLoader,它在后台线程(AsyncTask)中加载特定路径中的所有图像,并将它们存储在List位图中,其中ImageItem是一个带有图像和String的pojo类。
Bitmapfactory的解码速度非常慢(600张图像需要10分钟)。 如何改进以下代码以加快加载速度? 也许我只需要解码图像的缩放实例?
private Bitmap getThumbnail(File f, int THUMBNAIL_SIZE) {
BitmapFactory.Options onlyBoundsOptions = new BitmapFactory.Options();
onlyBoundsOptions.inJustDecodeBounds = true;
onlyBoundsOptions.inDither = false; //optional
onlyBoundsOptions.inPreferredConfig = Bitmap.Config.ARGB_8888; //optional
BitmapFactory.decodeFile(f.getAbsolutePath(), onlyBoundsOptions);
if ((onlyBoundsOptions.outWidth == -1) || (onlyBoundsOptions.outHeight == -1)) {
return null;
}
int originalSize = (onlyBoundsOptions.outHeight > onlyBoundsOptions.outWidth) ? onlyBoundsOptions.outHeight :
onlyBoundsOptions.outWidth;
double ratio = (originalSize > THUMBNAIL_SIZE) ? (originalSize / THUMBNAIL_SIZE) : 1.0;
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inSampleSize = getPowerOfTwoForSampleRatio(ratio);
bitmapOptions.inDither = false;//optional
bitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;//optional
return BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions);
}
private static int getPowerOfTwoForSampleRatio(double ratio) {
int k = Integer.highestOneBit((int) Math.floor(ratio));
if (k == 0) {
return 1;
} else {
return k;
}
}
我使用的是缩略图尺寸300。
答案 0 :(得分:1)
答案 1 :(得分:1)
谢谢你,@ BionicSheep为你的目标目标解决方案。 链接上的示例代码将我带到了我想要的东西。 但是,该代码包含一些可疑片段(例如,它永远不会写入缓存中)。但我终于让它顺利工作了。当我完成修复bug时,我会在下面上传修改后的代码。