1. 程式人生 > >Android拍照獲取不壓縮原圖方式以及存在的問題

Android拍照獲取不壓縮原圖方式以及存在的問題

一般的喚起拍照操作

//呼叫相機拍照
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);