您的位置:首页 > 其它

对图片进行二次采样,解决图片过大出现OM

2016-11-29 13:57 363 查看
二次采样
public class ThumbnailUtils {

// 对图像数据源采样
public static Bitmap getThumbnailBitmap(byte[] data, int sampleSize) {
// 第一次采样:目的是只获取图片的宽度和高度,并不希望获得图片像素点的全部数据
BitmapFactory.Options options = new BitmapFactory.Options();
// 第一次采样,只采图片的边界
options.inJustDecodeBounds = true;
// 开始执行第一次采样
BitmapFactory.decodeByteArray(data, 0, data.length, options);
// 设置压缩比例
options.inSampleSize = sampleSize;
// 图片进行第二次采样,既要采集图片的边界信息,又需要采集图片像素点的数据
options.inJustDecodeBounds = false;
Bitmap thumbnailBitmap = BitmapFactory
.decodeByteArray(data, 0, data.length, options);
return thumbnailBitmap;
}

// 对Bitmap对象采样,压缩倍数只有为2的n次方倍数时有效
public static Bitmap getThumbnailBitmap(Bitmap bitmap, int sampleSize) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();

BitmapFactory.Options options = new BitmapFactory.Options();
// 2.解码边缘
options.inJustDecodeBounds = true;
// 3进行图片解码
BitmapFactory.decodeByteArray(data, 0, data.length, options);
options.inSampleSize = sampleSize;
// 4.锁住边缘
options.inJustDecodeBounds = false;
// 5.通过参数获得新的位图
Bitmap thumbnailBitmap = BitmapFactory
.decodeByteArray(data, 0, data.length, options);
return thumbnailBitmap;
}

// 对本地图片进行二次采样
private Bitmap getThumbnailBitmap(String pathName, int sampleSize) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(pathName, options);
options.inSampleSize = sampleSize;
options.inJustDecodeBounds = false;
Bitmap thumbnailBitmap = BitmapFactory.decodeFile(pathName, options);
return thumbnailBitmap;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图片 压缩 安卓
相关文章推荐