0

このようなカメラデバイスからのキャプチャ画像を表示するコードがあります

Intent intent    = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    String file_name = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
                    File file        = new File(Environment.getExternalStorageDirectory(),
                                        "tmp_avatar_" + file_name + ".jpg");
                    mImageCaptureUri = Uri.fromFile(file);
                    intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

                    try {   

                        intent.putExtra("return-data", true);
                        intent.putExtra("mImageCaptureUri", mImageCaptureUri); 
                        startActivityForResult(intent, PICK_FROM_CAMERA);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }  

パスから画像ビットマップを設定すると、ポートレートビューカメラデバイスから画像をキャプチャすると機能しますが、ランドスケープビューカメラから画像をキャプチャするとエラーが発生します。画像を取得するアクティビティがポートレートであるためだと思います。それで、ポートレートまたはランドスケープビューカメラから画像をキャプチャできるようにするためのアドバイスを教えてもらえますか?ありがとう

4

2 に答える 2

1

これを試して

最初の開始意図

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_REQUEST); 

そして結果のための活動

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == CAMERA_REQUEST) {  
        if(data!=null && resultCode == RESULT_OK)
        {
        bitMapForProfilePic = (Bitmap) data.getExtras().get("data");
        bitMapForProfilePic =Bitmap.createScaledBitmap(bitMapForProfilePic, getWindowManager().getDefaultDisplay().getWidth()/5, getWindowManager().getDefaultDisplay().getHeight()/4, true);
        registration_profilePicID.setImageBitmap(bitMapForProfilePic);           bitMapForProfilePic=null;
        }
      }
    }  

ビットマップを保存したい場合

    extStorageDirectory = Environment.getExternalStorageDirectory().toString();
    OutputStream outStream = null;
   File file = new File(extStorageDirectory, "profilepicture.PNG");
   try {
    outStream = new FileOutputStream(file);
    bitMapForProfilePic.compress(Bitmap.CompressFormat.PNG, 100, outStream);

    outStream.flush();
    outStream.close();


   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

次に画像を設定します

view.setImageBitmap(BitmapFactory.decodeFile("/sdcard/profilepicture.PNG"));

疑問がある場合はお知らせください...

于 2012-11-02T06:25:55.220 に答える
0

私のアプリの1つで同様の問題に直面しました。次の方法で修正しました。まず、インスタンスの状態を保存します。

@Override
protected void onSaveInstanceState(Bundle state) {
    super.onSaveInstanceState(state);
state.putString(IMAGE_FILE_PATH, imageFilePath); }

そしてそれを復元します:

@Override
protected void onRestoreInstanceState(Bundle state) {
    super.onRestoreInstanceState(state);
ImageFilePath = state.getString(IMAGE_FILE_PATH); }

それは私にとってはうまくいきますが、変数ImageFilePathはアクティビティに対してグローバルである必要があるため、これを実現するためのより適切な方法があるかもしれません

于 2012-11-02T06:57:48.427 に答える