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);
}
写的有点乱……