`

2011.09.29(2)——— android 图片缩略图

阅读更多
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;
		}
	}

}
分享到:
评论

相关推荐

    基于因子分析的我国A股上市...争力评价——以医药企业为例_张澳.caj

    基于因子分析的我国A股上市...争力评价——以医药企业为例_张澳.caj

    python项目——微信机器人.zip

    python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人.zip python项目——微信机器人....

    JDK_1.7,amd64_ubuntu,安装包,直接下载安装即可完成1.7版本的SDK包。原生安装,不用配置环境变量,

    2,jdk-170.tar.gz ——————————JDK1.7deb包 3,switch_java.sh -------------------------java其它版本切换 4,check_java.sh———————————版本核对 注意:使用命令接口切换时,需要将自己配置的...

    python项目——Word助手.zip

    python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目...

    嵌入式成品项目-无线接收时钟.zip

    嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟...

    C语言项目——MP3音乐播放器.zip

    C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——...

    python项目——RCQ读者书库.zip

    python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ...

    数据库大作业-学校人事信息管理系统.zip

    数据库大作业——学校人事信息管理系统.zip数据库大作业——学校人事信息管理系统.zip数据库大作业——学校人事信息管理系统.zip数据库大作业——学校人事信息管理系统.zip数据库大作业——学校人事信息管理系统.zip...

    微信小程序——移动端商城(截图+源码).zip

    微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+源码).zip 微信小程序——移动端商城(截图+...

    微信小程序——用户反馈组件(截图+源码).zip

    微信小程序——用户反馈组件(截图+源码).zip 微信小程序——用户反馈组件(截图+源码).zip 微信小程序——用户反馈组件(截图+源码).zip 微信小程序——用户反馈组件(截图+源码).zip 微信小程序——用户反馈...

    小学语文一年级下册反义及量词练习大全.pdf

    29. 爱——恨 30. 哭——笑 31. 这——那 32. 分——合 33. 圆——方 34. 远——近 35. 直——弯 36. 高——低 37. 真——假 38. 往——来 39. 新——旧 40. 卖——买 41. 外——内 42. 苦——甜 43. 活——死 44. ...

    大创项目-区块链追溯系统.zip大创项目-区块链追溯系统.zip

    大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链追溯系统.zip大创项目——区块链...

    Android support.v7包

    Android support.v7包

    Android中文翻译组——Android中文API合集(4).chm

    Android中文翻译组——Android中文API合集(4).chm

    Bluetooth_4.3-master.rar

    ,最近一直和医疗打交道,做些蓝牙有关的...2.深入了解Android蓝牙Bluetooth——《进级篇》 2.深入了解Android蓝牙Bluetooth——《总结篇》 欢迎入群 QQ交流群 :232203809 微信公众号:终端研发部。加入我们一起学习

    Android 图片浏览全屏缩放

    在Android开发中,实现图片浏览的全屏缩放效果是一项常见的需求,特别是在社交应用中,如QQ好友动态和微信朋友圈。这种功能不仅需要提供良好的用户体验,还需要考虑性能和内存优化,因为图片通常较大,处理不当可能...

    微信小程序——小游戏-别踩白块(截图+源码).zip

    微信小程序——小游戏-别踩白块(截图+源码).zip 微信小程序——小游戏-别踩白块(截图+源码).zip 微信小程序——小游戏-别踩白块(截图+源码).zip 微信小程序——小游戏-别踩白块(截图+源码).zip 微信小程序...

    java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip

    java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的仿微博系统设计与实现(源码+数据库).zip java毕业...

    微信小程序——学校管理小程序以重邮为例(截图+源码).zip

    微信小程序——学校管理小程序以重邮为例(截图+源码).zip 微信小程序——学校管理小程序以重邮为例(截图+源码).zip 微信小程序——学校管理小程序以重邮为例(截图+源码).zip 微信小程序——学校管理小程序以...

    java毕业设计——基于ssm的房屋租赁系统设计与实现(源码+数据库).zip

    java毕业设计——基于ssm的房屋租赁系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的房屋租赁系统设计与实现(源码+数据库).zip java毕业设计——基于ssm的房屋租赁系统设计与实现(源码+数据库).zip java...

Global site tag (gtag.js) - Google Analytics