2011.09.29(二)——— android 图片缩略图
2011.09.29(2)——— android 图片缩略图
2011.09.29(2)——— android 图片缩略图
参考:http://www.eoeandroid.com/thread-101021-1-1.html
前面 我们说过视频缩略图的做法 今天 看一下图片的缩略图获得 直接上代码 一个工具类
2011.09.29(2)——— android 图片缩略图
参考:http://www.eoeandroid.com/thread-101021-1-1.html
前面 我们说过视频缩略图的做法 今天 看一下图片的缩略图获得 直接上代码 一个工具类
package com.lp; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.provider.MediaStore; public final class BitmapUtil { public static Bitmap decodeBitmap(String path, int displayWidth, int displayHeight) { BitmapFactory.Options op = new BitmapFactory.Options(); op.inJustDecodeBounds = true; // op.inJustDecodeBounds = true;表示我们只读取Bitmap的宽高等信息,不读取像素。 Bitmap bmp = BitmapFactory.decodeFile(path, op); // 获取尺寸信息 // op.outWidth表示的是图像真实的宽度 // op.inSamplySize 表示的是缩小的比例 // op.inSamplySize = 4,表示缩小1/4的宽和高,1/16的像素,android认为设置为2是最快的。 // 获取比例大小 int wRatio = (int) Math.ceil(op.outWidth / (float) displayWidth); int hRatio = (int) Math.ceil(op.outHeight / (float) displayHeight); // 如果超出指定大小,则缩小相应的比例 if (wRatio > 1 && hRatio > 1) { if (wRatio > hRatio) { // 如果太宽,我们就缩小宽度到需要的大小,注意,高度就会变得更加的小。 op.inSampleSize = wRatio; } else { op.inSampleSize = hRatio; } } op.inJustDecodeBounds = false; bmp = BitmapFactory.decodeFile(path, op); return Bitmap.createScaledBitmap(bmp, displayWidth, displayHeight, true); // Bitmap.createScaledBitmap(Bitmap src,int detWidth,int detHeight,boolean filter) // 从原Bitmap创建一个给定宽高的Bitmap } /** * * 采用复杂计算来决定缩放 * * * @param path * * * @param maxImageSize * * * @return */ public static Bitmap decodeBitmap(String path, int maxImageSize) { BitmapFactory.Options op = new BitmapFactory.Options(); op.inJustDecodeBounds = true; Bitmap bmp = BitmapFactory.decodeFile(path, op); // 获取尺寸信息 int scale = 1; if (op.outWidth > maxImageSize || op.outHeight > maxImageSize) { // Math.pow(double a, double b)表示返回第一个参数的第二个参数的次幂 // Math.log(double a)返回double的自然对数,底数是e // Math.round(double e)返回最接近double的值 scale = (int) Math.pow(2, (int) Math.round(Math.log(maxImageSize / (double) Math.max(op.outWidth, op.outHeight)) / Math.log(0.5))); } op.inJustDecodeBounds = false; op.inSampleSize = scale; bmp = BitmapFactory.decodeFile(path, op); return bmp; } public static Cursor queryThumbnails(Activity context) { String[] columns = new String[] { // Thumbnails表示的缩略图的意思 MediaStore.Images.Thumbnails.DATA, MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.IMAGE_ID }; return context.managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, columns, null, null, MediaStore.Images.Thumbnails.DEFAULT_SORT_ORDER); } public static Cursor queryThumbnails(Activity context, String selection, String[] selectionArgs) { String[] columns = new String[] { MediaStore.Images.Thumbnails.DATA, MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.IMAGE_ID }; // public final Cursor managedQuery (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) // uri The URI of the content provider to query. // projection List of columns to return. // selection SQL WHERE clause. // selectionArgs The arguments to selection, if any ?s are pesent // sortOrder SQL ORDER BY clause. return context.managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, columns, selection, selectionArgs, MediaStore.Images.Thumbnails.DEFAULT_SORT_ORDER); } // 通过缩略图的ID来查询 public static Bitmap queryThumbnailById(Activity context, int thumbId) { String selection = MediaStore.Images.Thumbnails._ID + " = ?"; String[] selectionArgs = new String[] { thumbId + "" }; Cursor cursor = BitmapUtil.queryThumbnails(context, selection, selectionArgs); if (cursor.moveToFirst()) { String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA)); cursor.close(); return BitmapUtil.decodeBitmap(path, 100, 100); } else { cursor.close(); return null; } } public static Bitmap[] queryThumbnailsByIds(Activity context, Integer[] thumbIds) { Bitmap[] bitmaps = new Bitmap[thumbIds.length]; for (int i = 0; i < bitmaps.length; i++) { bitmaps[i] = BitmapUtil.queryThumbnailById(context, thumbIds[i]); } return bitmaps; } /** * * 获取全部 * * * * * @param context * * @return * * */ public static List<Bitmap> queryThumbnailList(Activity context) { List<Bitmap> bitmaps = new ArrayList<Bitmap>(); Cursor cursor = BitmapUtil.queryThumbnails(context); for (int i = 0; i < cursor.getCount(); i++) { cursor.moveToPosition(i); String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA)); Bitmap b = BitmapUtil.decodeBitmap(path, 100, 100); bitmaps.add(b); } cursor.close(); return bitmaps; } public static List<Bitmap> queryThumbnailListByIds(Activity context, int[] thumbIds) { List<Bitmap> bitmaps = new ArrayList<Bitmap>(); for (int i = 0; i < thumbIds.length; i++) { Bitmap b = BitmapUtil.queryThumbnailById(context, thumbIds[i]); bitmaps.add(b); } return bitmaps; } public static Cursor queryImages(Activity context) { String[] columns = new String[] { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.DISPLAY_NAME }; return context.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, MediaStore.Images.Media.DEFAULT_SORT_ORDER); } public static Cursor queryImages(Activity context, String selection, String[] selectionArgs) { String[] columns = new String[] { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.DISPLAY_NAME }; return context.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, selection, selectionArgs, MediaStore.Images.Media.DEFAULT_SORT_ORDER); } public static Bitmap queryImageById(Activity context, int imageId) { String selection = MediaStore.Images.Media._ID + "=?"; String[] selectionArgs = new String[] { imageId + "" }; Cursor cursor = BitmapUtil.queryImages(context, selection, selectionArgs); if (cursor.moveToFirst()) { String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)); cursor.close(); // return BitmapUtills.decodeBitmap(path, 260, 260); return BitmapUtil.decodeBitmap(path, 220); // 看看和上面这种方式的差别,看了,差不多 } else { cursor.close(); return null; } } /** * * 根据缩略图的Id获取对应的大图 * * * @param context * * * @param thumbId * * * @return * */ public static Bitmap queryImageByThumbnailId(Activity context, Integer thumbId) { String selection = MediaStore.Images.Thumbnails._ID + " = ?"; String[] selectionArgs = new String[] { thumbId + "" }; Cursor cursor = BitmapUtil.queryThumbnails(context, selection, selectionArgs); if (cursor.moveToFirst()) { int imageId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.IMAGE_ID)); cursor.close(); return BitmapUtil.queryImageById(context, imageId); } else { cursor.close(); return null; } } }