/** * 根据指定的图像路径和大小来获取缩略图 * 此方法有两点好处: * 1. 使用较小的内存空间,第一次获取的bitmap实际上为null,只是为了读取宽度和高度, * 第二次读取的bitmap是根据比例压缩过的图像,第三次读取的bitmap是所要的缩略图。 * 2. 缩略图对于原图像来讲没有拉伸,这里使用了2.2版本的新工具ThumbnailUtils,使 * 用这个工具生成的图像不会被拉伸。 * @param imagePath 图像的路径 * @param width 指定输出图像的宽度 * @param height 指定输出图像的高度 * @return 生成的缩略图 */ private void getImageThumbnail(ImageView thumbnails_img,String imagePath,int width,int height) { asy = new AsyncImageTask(thumbnails_img,width,height); asy.execute(imagePath); } /** * 使用异步线程加载图片 * 线程池 */ private final class AsyncImageTask extends AsyncTask<String,Integer,Bitmap>{ private ImageView thumbnails_img; private int width; private int height; public AsyncImageTask(ImageView thumbnails_img,int width, int height) { this.thumbnails_img = thumbnails_img; this.width = width; this.height = height; } protected Bitmap doInBackground(String... params) { img_bitmap = null; //节约内存 options.inPreferredConfig = Bitmap.Config.ARGB_4444;/*设置让解码器以最佳方式解码*/ options.inPurgeable = true; options.inInputShareable = true; options.inJustDecodeBounds = true; //If diTher is true, the decoder will attempt to dither the decoded image options.inDither = false;//不进行图片抖动处理 // 获取这个图片的宽和高,注意此处的bitmap为null img_bitmap = BitmapFactory.decodeFile(params[0], options); options.inJustDecodeBounds = false;//设为 false //计算缩放比 int h = options.outHeight; int w = options.outWidth; int beWidth = w / width; int beHeight = h / height; int be = 1; if (beWidth < beHeight) { be = beWidth; } else { be = beHeight; } if (be <= 0) { be = 1; } options.inSampleSize = be; // 重新读入图片,读取缩放后的bitmap,注意这次要把options.inJustDecodeBounds 设为 false img_bitmap = BitmapFactory.decodeFile(params[0], options); // 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象 img_bitmap = ThumbnailUtils.extractThumbnail(img_bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); return img_bitmap; } //处理结果 protected void onPostExecute(Bitmap result) { if(result!=null&&thumbnails_img != null){ thumbnails_img.setImageBitmap(result); asy_list.add(asy); asy = null; // img_bitmap.recycle(); img_bitmap=null; } } }
时间: 2024-10-25 15:01:19