android 根据uri得到带文件后缀名的uri、避免OOM获取预览图片

1、根据uri获得文件的路径 这个方法是copy别人的

public static String getRealFilePath(final Context context, final Uri uri) {
if (null == uri)
return null;
final String scheme = uri.getScheme();
String data = null;
if (scheme == null)
data = uri.getPath();
else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
data = uri.getPath();
} else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
Cursor cursor = context.getContentResolver().query(uri,
new String[] { ImageColumns.DATA }, null, null, null);
if (null != cursor) {
if (cursor.moveToFirst()) {
int index = cursor.getColumnIndex(ImageColumns.DATA);
if (index > -1) {
data = cursor.getString(index);
}
}
cursor.close();
}
}
return data;
}

2、通过Uri.fromFile(new File(path));就可以获得带后缀的uri了

3、裁剪uri对应的bitmap,防止OOM,方法如下

private Bitmap getResizedBitmap(Uri uri) {
int imgW = 0;
int imgH = 0;
String path = getRealFilePath(this, mUri);
Options options = new Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
imgW = options.outWidth;
imgH = options.outHeight;


int max = imgW > imgH ? imgW : imgH;
if (max <= DEFAULT_SIZE) {
options.inSampleSize = 1;
} else {
float scale = (float) (max * 1.0 / DEFAULT_SIZE) + 0.5f;
options.inSampleSize = (int) scale;
}
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(path, options);
}


4、将得到的图片存入到本地构建uri

private Uri bitmap2Uri(Bitmap tempBitmap) {
if (tempBitmap == null) {
return null;
}
File tempFile = new File(getCacheDir(), "temp.jpg");
// File tempFile = new File(Environment.getExternalStorageDirectory(),
// "temp.jpeg");
if (tempFile.exists()) {
tempFile.delete();
}
try {
FileOutputStream out = new FileOutputStream(tempFile);
tempBitmap.compress(Bitmap.CompressFormat.JPEG, 75, out);
out.flush();
out.close();
// System.out.println("saved !");
} catch (Exception e) {
e.printStackTrace();
return null;
}
return Uri.fromFile(tempFile);
}


写的有点乱……



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值