2012-10-04 11 views
5

イメージを既存のカメラアプリケーションからキャプチャし、カスタマイズしたフォルダに保存し、サムネイルをimageViewに表示しようとしています。イメージサムネイルをキャプチャしてアンドロイドのカスタムフォルダにファイルを保存する方法

... 
    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 

ご覧のとおり、返されるフィールドはビットマップサムネイルの代わりにnullです。私はビットマップを後でファイルから直接サムネイルを生成するようにデコードしようとしましたが、(たとえダウンサンプルしてもメモリエラーから抜けても)時間がかかりすぎてしまい、2度の作業を直観に反するようです。助言がありますか?

+0

を試してみてください。 [1]:http://stackoverflow.com/a/9734268/1172945返信用 – Tugrul

答えて

4

オーケーとしてそこに画像を設定することを確認。 outputURIをインテントに渡すと、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

これを試してください Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent、CAMERA_REQUEST); –

+0

CAMERA_REQUESTはカメラから返された整数です。なぜ、戻ったばかりの別の意図でカメラアプリケーションを起動するのですか? – keighty

-1

[1]ファイルのディレクトリをspecifingためにあなたを助けることができる私は、[この回答]と思うこの

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_REQUEST); 
関連する問題