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;}}}

更多相关文章

  1. android中设置AlertDialog的大小 .
  2. android为图片生成缩略图
  3. Android 自定义camera压缩图片到指定大小
  4. 教你如何修改Android默认字体大小和设置字体大小比例
  5. Android android:scaleType属性 图片按比例缩放
  6. Android 获得图片并解码成缩略图以减少内存消耗
  7. android icon 大小
  8. Android 模拟器窗口大小的修改
  9. Android修改原生RatingBar颜色、大小,以及自定义的样式

随机推荐

  1. Android动态加载——加载已安装APK中的类
  2. 2013.11.29 ——— android layout不显示
  3. HandlerThread+IntentService
  4. Android中文件读写操作
  5. Android设备在Mac上不能识别
  6. Android NDK日志调试
  7. Android(安卓)解决启动界面显示空白问题
  8. Android图形系统的底层实现
  9. Android布局LinearLayout子控件无法填充
  10. Android通知使用权(NotificationListener