Android拍照獲取不壓縮原圖方式以及存在的問題
阿新 • • 發佈:2019-02-15
一般的喚起拍照操作
//呼叫相機拍照 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, key); //在Activity的onActivityResult方法中獲取資料 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null) { try { Bundle extras = data.getExtras(); if(extras==null){ return null; } Bitmap b = (Bitmap) extras.get("data"); } catch (Exception e) { //do } } }
注意
這樣獲取的圖片資料是被系統壓縮過的,因為相機拍出的圖片有可能非常大,而如果通過Bundle傳輸中資料過大會導致崩潰
獲取未壓縮的原圖
那怎麼樣才能獲取到拍照的原圖呢?通過提前設定一個儲存路徑,將路徑在呼叫相機的時候傳輸給系統服務,讓系統直接將圖片儲存到預先定義的檔案中,不再通過Bundle傳輸回來(此時1中onActivityResult方法的data是null)
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); String fileSaveName = makeFileName(); File out = new File(fileSaveName); Uri uri = Uri.fromFile(out); // 獲取拍照後未壓縮的原圖片,並儲存在uri路徑中 intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent, AddInspectionOrderActivity.KEY_GET_INSPECTION_PHOTO);
通過上述方式就可以使系統將拍照的檔案儲存到預先設定的檔案中, 但是在7.0之後不能夠直接通過
Uri uri = Uri.fromFile(out); 來獲取檔案了, 需要通過Provider來獲取
//判斷是否存在儲存檔案的資料夾 String filePath = Environment.getExternalStorageDirectory().toString() + File.separator + “juli/image/”; FileUtil.isExist(filePath);