6

既存のカメラアプリケーションから画像をキャプチャし、その画像をカスタマイズされたフォルダに保存して、サムネイルを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回実行するのは直感に反しているようです。助言がありますか?

4

3 に答える 3

5

わかった。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));
        }
    }
}
于 2012-10-04T11:31:00.927 に答える
0

Bitmap mImageBitmap はローカル変数です。onActivityResultFunction の外で使用する場合はグローバルにします。それ以外の場合は、画像を次のように設定します。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST) {
        photo = (Bitmap) data.getExtras().get("data");
        imageView.setImageBitmap(photo);
    }
}
于 2012-10-04T11:19:26.570 に答える
-1

これを試して

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
于 2012-10-04T11:35:27.360 に答える