android图片二次采样(缩略图)

1.封装二次采样方法

package com.example.imageuploaddemo.utils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.ThumbnailUtils;

public class BitmapUtil {
public static Bitmap getBitmap(String imagePath, int width, int height) {

Bitmap bitmap = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;


// 获取这个图片的宽和高,注意此处的bitmap为null
bitmap = BitmapFactory.decodeFile(imagePath, 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
bitmap = BitmapFactory.decodeFile(imagePath, options);
// 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象
bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

return bitmap;
}

}


2.显示拍照缩略图

(1)private static final int TYPE_PHOTO = 1;

     // 拍照

Intent intentPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intentPhoto, TYPE_PHOTO);

(2)List<String> image_list = new ArrayList<String>;

/**

* 创建 拍照 的临时存放路径
*/

private String createTemp() {
String path = Environment.getExternalStorageDirectory()
+ "/DCIM/zidingyi/" + "IMG_" + System.currentTimeMillis()
+ ".jpg";

File tempFile;
tempFile = new File(path);// 图片储存路径
if (!tempFile.getParentFile().exists()) {
tempFile.getParentFile().mkdirs();
}

return path;
}


@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK) {
// 调用系统相机拍照
if (requestCode == TYPE_PHOTO) {

Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式

/*第一种方法:
@SuppressWarnings("static-access")
String name = new DateFormat().format("yyyyMMdd_hhmmss",
Calendar.getInstance(Locale.CHINA)) + ".jpg";

String path = Environment.getExternalStorageDirectory()
+ "/DCIM/zidingyi/";

// 不能直接保存在系统相册位置
File file = new File(path);
file.mkdirs();// 创建文件夹
String fileName = path + "IMG_" + System.currentTimeMillis()
+ ".jpg";
ToastUtil.show(getApplicationContext(), fileName);

*/

/*
* 第二种方法:
*/
String fileName = createTemp();

FileOutputStream b = null;
try {
b = new FileOutputStream(fileName);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件(100是压缩率,如果不压缩是100,表现压缩率为0
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}

image_list.add(fileName);// String

}

}

(3)显示缩略图

Bitmap bitmap = BitmapUtil.getBitmap(list.get(position), 200, 200);// String

holder.iv.setImageBitmap(bitmap);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值