呼叫系統相機拍照獲取圖片或者從相簿中呼叫本地圖片顯示問題
阿新 • • 發佈:2019-01-26
需求是這樣的:開啟系統或者第三方相機app拍照,然後使用所拍照片進行處理,或者直接呼叫系統或者第三方相簿app,選擇圖片返回使用。需求很簡單,過程很蛋疼,網上有很多方法,不過有很多不好用的地方,最後使用的這種方式還不錯,記錄一下,還是那句話,我很懶,以後複製使用直接複製程式碼:
1.呼叫相機拍照返回所拍照片(不是縮圖),點選按鈕,呼叫相機:
獲取所得照片:Intent intent = new Intent(); intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); File file = new File(getExternalFilesDir(Environment.DIRECTORY_DCIM) +"/bidata"); if (!file.exists()) { file.mkdirs(); } intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(file, "cameraTmp.png"))); startActivityForResult(intent, 0);
2.呼叫相簿獲取圖片@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { case 0: Bitmap bitmap = CommonUtils.getBitmap(this, getExternalFilesDir(Environment.DIRECTORY_DCIM) + "/bidata/"+ "cameraTmp.png"); break; } super.onActivityResult(requestCode, resultCode, data); }
Intent picture = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(picture, 1);
獲取所得到的圖片:
最後把兩個載入bitmap的方法貼出來:@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { case 1: CommonUtils.bitmap = BitmapFactory.decodeFile(CommonUtils.getRealFilePath(this, data.getData())); break; } } super.onActivityResult(requestCode, resultCode, data); }
/**
* 由string型別的路徑載入圖片
*
* @param context
* @param path
* @return
*/
public static Bitmap getBitmap(Context context, String path) {
Uri uri = Uri.fromFile(new File(path));
InputStream in = null;
try {
in = context.getContentResolver().openInputStream(uri);
// Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(in, null, o);
in.close();
int scale = 1;
if (o.outHeight > 1024 || o.outWidth > 1024) {
scale = (int) Math.pow(
2,
(int) Math.round(Math.log(1024 / (double) Math.max(
o.outHeight, o.outWidth)) / Math.log(0.5)));
}
if (scale < 4) {
scale = 4;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
in = context.getContentResolver().openInputStream(uri);
Bitmap b = BitmapFactory.decodeStream(in, null, o2);
in.close();
return b;
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
return null;
}
/**
* 將圖片的uri轉為絕對路徑
*
* @param context
* @param uri
* @return
*/
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[]{MediaStore.Images.ImageColumns.DATA}, null, null, null);
if (null != cursor) {
if (cursor.moveToFirst()) {
int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
if (index > -1) {
data = cursor.getString(index);
}
}
cursor.close();
}
}
return data;
}
也 希望對有需要的戰友有幫助。。。。