1

В моем приложении для Android я хочу захватить изображение с камеры и передать это изображение Uri для следующего действия.Изображение камеры возвращает изображение в Android

Здесь я получаю миниатюру изображения захваченного изображения. Чтобы решить эту проблему, я использовал MediaStore.EXTRA_OUTPUT для моего намерения захватить изображение.

Теперь, я не знаю, как получить uri из текущего захваченного изображения. Я попробовал код ниже и пропустил imageUri в следующем действии, но он выбрасывает исключение NoSuchFileDirectory.

Я ссылался на ссылку this, но не получил четкого представления о том, как получить захваченное изображение Uri и передать его следующей активности. Пожалуйста, помогите мне решить эту проблему. Если вы обнаружите какие-либо проблемы с этим кодом, тогда предложите, где я ошибаюсь.

Код:

 btnCamera.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       dialog.dismiss(); 
       Intent pictureActionIntent = new Intent(
         android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

       File photo = null; 
       try { 

        photo = SaveCameraImage(); 

       } catch (Exception e) { 
        Log.e("Camera capture-------------", 
          "Can't create file to take picture!"); 
        Toast.makeText(SelectFrameActivity.this, 
          "Please check SD card! Image shot is impossible!", 
          10000).show(); 

       } 
       mImageUri = Uri.fromFile(photo); 
       pictureActionIntent 
         .putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); 

       startActivityForResult(pictureActionIntent, TAKE_PICTURE); 
      } 
     }); 


private File SaveCameraImage() { 
     try { 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); 
      String dt = sdf.format(new Date()); 

      imageFile = null; 
      imageFile = new File(Environment.getExternalStorageDirectory(), 
        "FrameFace/" + "Camera_" + dt + ".png"); 
      Log.e("New Camera Image Path:-", 
        Environment.getExternalStorageDirectory() + "/FrameFace/" 
          + "Camera_" + dt + ".png"); 

      if (!imageFile.exists()) 
       imageFile.createNewFile(); 

      bmp_camera_image.compress(Bitmap.CompressFormat.PNG, 100, 
        new FileOutputStream(imageFile)); 

      Log.e("imagetext", "the file has saved to the sdcard"); 

      imagePath = Environment.getExternalStorageDirectory() 
        + "/FrameFace/" + "Camera_" + dt + ".png"; 

      Log.e("FaceFrameActivity - SaveCameraImage: ", "Image is Saved to" 
        + imagePath); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return imageFile; 
    } 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, 
      final Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
     case TAKE_PICTURE: 
      Log.e("result code: ", Integer.toString(Activity.RESULT_OK) + " " 
        + Integer.toString(resultCode)); 

      if (resultCode == Activity.RESULT_OK) { 

       // bmp_camera_image = (Bitmap) data.getExtras().get("data"); 
       SaveCameraImage(); 

       // this.getContentResolver().notifyChange(mImageUri, null); 
       // ContentResolver cr = this.getContentResolver(); 
       // try { 
       // GlobalClass.cameraBitmap = 
       // android.provider.MediaStore.Images.Media 
       // .getBitmap(cr, mImageUri); 
       // } catch (FileNotFoundException e) { 
       // // TODO Auto-generated catch block 
       // e.printStackTrace(); 
       // } catch (IOException e) { 
       // // TODO Auto-generated catch block 
       // e.printStackTrace(); 
       // } 

       Handler h = new Handler(); 
       h.postDelayed(new Runnable() { 
        @Override 
        public void run() { 

         Intent intent = new Intent(getApplicationContext(), 
           FaceCropActivity_dual.class); 
         // intent.putExtra("imagePath", imagePath); 
         intent.putExtra("imagePath", mImageUri.toString()); 
         startActivity(intent); 
        } 
       }, 500); 
      } 
      break; 
    } 
    } 

ответ

1

я использовал этот код и его работы для меня, чтобы сохранить изображение с камеры и получение uri этого образа.

btnCamera.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       try { 
        dialog.dismiss(); 
        SimpleDateFormat sdf = new SimpleDateFormat(
          "yyyyMMdd_HHmmss"); 
        String dt = sdf.format(new Date()); 

        imageFile = null; 
        imageFile = new File(Environment 
          .getExternalStorageDirectory() + "/FrameFace/", 
          "Camera_" + dt + ".png"); 
        Log.e("New Camera Image Path:-", 
          Environment.getExternalStorageDirectory() 
            + "/FrameFace/" + "Camera_" + dt + ".png"); 

        if (!imageFile.exists()) 
         imageFile.createNewFile(); 

        imagePath = Environment.getExternalStorageDirectory() 
          + "/FrameFace/" + "Camera_" + dt + ".png"; 

        Uri outputFileUri = Uri.fromFile(imageFile); 

        Intent pictureActionIntent = new Intent(
          android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

        pictureActionIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
          outputFileUri); 

        startActivityForResult(pictureActionIntent, TAKE_PICTURE); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 
     }); 
@Override 
    protected void onActivityResult(int requestCode, int resultCode, 
      final Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
     case TAKE_PICTURE: 
      Log.e("result code: ", Integer.toString(Activity.RESULT_OK) + " " 
        + Integer.toString(resultCode)); 

      if (resultCode == Activity.RESULT_OK) { 
Handler h = new Handler(); 
       h.postDelayed(new Runnable() { 
        @Override 
        public void run() { 

         Intent intent = new Intent(getApplicationContext(), 
           FaceCropActivity_dual.class); 
         // intent.putExtra("imagePath", imagePath); 
         Log.e("Image Path-------------", "" + imagePath); 
         intent.putExtra("imagePath", imagePath); 
         startActivity(intent); 
        } 
       }, 500); 
      } 
      break; 
} 
    } 
0
imageFile = new File(Environment.getExternalStorageDirectory(), 
       "FrameFace/" + "Camera_" + dt + ".png"); 

здесь ваше создание подкаталога и файла в одном кадре. создать каталог, то файл изображения

обновление попробовать это

imageFile = new File(Environment.getExternalStorageDirectory()+"/FrameFace" ,"Camera_" + dt + ".png"); 

удалить это из oncick слушателя

  File photo = null; 
      try { 

       photo = SaveCameraImage(); 

      } catch (Exception e) { 
       Log.e("Camera capture-------------", 
         "Can't create file to take picture!"); 
       Toast.makeText(SelectFrameActivity.this, 
         "Please check SD card! Image shot is impossible!", 
         10000).show(); 

      } 
+0

Нет, я уже создал каталог «FrameFace» в разделе «Предыдущая активность». И его работа отлично. Я просто создаю новый файл для сохранения изображения. – zanky

+0

попробуйте обновление ans – Sush

+0

Это не имеет значения, так как оба дают одинаковый Uri. Это не решит мою проблему. – zanky

0

Я создал обертку, которая поможет вам в этом. См. Полное обсуждение stackoverflow here или найдите код на github.