2012-10-04 88 views
5

我想從現有的相機應用程序捕獲圖像,將圖像保存在自定義文件夾中,並在縮略圖和imageView中顯示。如何捕獲圖像縮略圖並將文件保存在Android中的自定義文件夾中

我可以從返回的意圖得到縮略圖:

... 
    Intent i = = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(i) 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent);  
    Bundle extras = intent.getExtras(); 
    Bitmap mImageBitmap = (Bitmap) extras.get("data"); 
} 

或者,我可以將文件保存在指定文件夾中的相機,只要我還沒有指定在哪裏保存文件提供縮略圖(工作正常)

... 
    Intent i = = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    i.putExtra((MediaStore.EXTRA_OUTPUT, outputFileUri); 
    startActivityForResult(i) 
} 

但縮略圖不再存儲在意向額外的「數據」,當我嘗試檢索縮略圖,我得到一個錯誤(這是從我的logcat)

10-04 06:30:14.463: E/AndroidRuntime(1967): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity: java.lang.NullPointerException 

如您所見,返回的字段爲空而不是位圖縮略圖。之後,我嘗試解碼位圖以直接從文件生成縮略圖,但這需要很長時間(即使下采樣時出現內存不足錯誤),並且這樣做似乎違反了直覺。有什麼建議麼?

+0

我認爲[這個答案] [1]可以幫助您爲specifing文件目錄。 [1]:http://stackoverflow.com/a/9734268/1172945 – Tugrul

回答

4

好。如果您將一個outputURI傳遞給intent,那麼您將無法從onActivityResult()中的意圖中接收數據。

我認爲,唯一的選擇就是使用相同的outputURI顯示縮略圖..

試試這個。

void captureImage(){ 
    File file = new File(Environment.getExternalStorageDirectory() 
    .getAbsolutePath() + "/MyFolder", "myImage"+ ".jpg"); 

mCapturedImagePath = file.getAbsolutePath(); 
     Uri outputFileUri = Uri.fromFile(file); 
    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    i.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    startActivityForResult(i, CAMERA_REQUEST); 

}

onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_REQUEST) { 
      if (resultCode == RESULT_OK) { 

File file = new File(mCapturedImagePath); 
imageView.setImageURI(Uri.fromFile(file)); 

} 
+0

感謝您的建議,但我正在測試同一活動中的返回意圖的結果(實際上在onActivityResult中)。如果我已經提供了i.putExtra(MediaStore,相機不會返回縮略圖。EXTRA_OUTPUT,outputFileUri); – keighty

+0

我編輯了我的問題,使其更清楚。 – keighty

+0

camera_request是一個整數請求代碼,並給它任何你想要的值。例如CAMERA_REQUEST = 1 –

0

位圖mImageBitmap是一個局部變量,使全球,如果你想使用它的onActivityResultFunction以外的地方設置圖像那裏

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST) { 
     photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 
    } 
} 
+0

感謝您的答覆,但問題不在於我不能在其他地方使用位圖,它當我給它一個輸出文件名時,相機不返回縮略圖 – keighty

+0

試試這個 意圖cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent,CAMERA_REQUEST); –

+0

CAMERA_REQUEST是從相機返回的整數。爲什麼在剛剛返回的時候用另一個意圖啓動相機應用程序? – keighty

-1

試試這個

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_REQUEST); 
相關問題