2016-07-14 2 views
0

мне нужно, чтобы сделать снимок из моего приложения и отображать его на ImageView, так что теперь I'm с помощью намерения запроса:Android взять и отображение фото из камеры с полным разрешением

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
        startActivityForResult(intent, REQUEST_CAMERA); 

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
      if (requestCode == REQUEST_CAMERA) { 
       bm = (Bitmap) data.getExtras().get("data"); 
       imageView.setImageBitmap(bm); 
      } 
     } 
    } 

Проблема заключается в том, что это код получает снимок изображения, а не изображение в полном разрешении, и я не знаю, как его получить. Я искал, и я нашел это https://developer.android.com/training/camera/photobasics.html, но поскольку я начинаю с этого, я не понимаю.

Может ли кто-нибудь помочь мне, пожалуйста?

+1

Все объяснено в этом документе в разделе «Сохранить полноразмерную фотографию». Так что же вы не понимаете? Вы отправили код для получения миниатюры. Но вы могли бы лучше опубликовать код для получения полноразмерного изображения. – greenapps

+1

Ссылка, которую вы дали сам, отвечает на вопрос .. –

+0

getExtras(). Get ("data") дает вам миниатюру, но может быть нулевым. Ответ guarang показывает, как получить доступ к самому файлу фотографии. Обратите внимание, что он может исчерпывать вашу память, если он используется для setImageURI() без предупреждения –

ответ

2

Прежде чем вызвать CameraIntent, создайте файл и uri на основе этого пути к файлу, как показано здесь.

filename = Environment.getExternalStorageDirectory().getPath() + "/test/testfile.jpg"; 
imageUri = Uri.fromFile(new File(filename)); 

// start default camera 
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, 
       imageUri); 
startActivityForResult (cameraIntent, CAMERA_PIC_REQUEST); 

Теперь у вас есть путь_к_файл вы можете использовать его в onAcityvityResult метода следующим образом,

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode != CAMERA_PIC_REQUEST || filename == null) 
     return; 
    ImageView img = (ImageView) findViewById(R.id.image); 
    img.setImageURI(imageUri); 
+0

'create file'. К счастью, вы этого не делаете. Но вы должны добавить код, который проверяет, существует ли каталог и если он не создан. – greenapps

+0

На самом деле, это не работает, вы можете сделать снимок, но задумали выбрать фотографию, щелкнув «Проверка», приложение камеры не открывается – Javierd98

0

Попробуйте этот код, он работает для меня. Открыть камеру, используя код ниже:

Intent intent = new Intent(); 
      try { 
       if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)&& !Environment.getExternalStorageState().equals(
         Environment.MEDIA_MOUNTED_READ_ONLY)) { 
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 
        File file = new File(Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+ ".your folder name" 
          + File.separator + "picture").getPath()); 
        if (!file.exists()) { 
         file.mkdirs(); 
        } 
        capturedImageUri = Uri.fromFile(File.createTempFile("your folder name" + new SimpleDateFormat("ddMMyyHHmmss", Locale.US).format(new Date()), ".jpg", file)); 
        intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri); 
        startActivityForResult(intent, Util.REQUEST_CAMERA); 
       } else { 
        Toast.show(getActivity(),"Please insert memory card to take pictures and make sure it is write able"); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

В onActivityResult получить путь захваченного изображения:

try { 
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) && !Environment.getExternalStorageState().equals(
          Environment.MEDIA_MOUNTED_READ_ONLY)) { 
         File file = new File(Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator 
           + ".captured_Images"+ File.separator+ "picture").getPath()); 
         if (!file.exists()) { 
          file.mkdirs(); 
         } 

selectedPath1 = capturedImageUri.toString().replace("file://", ""); 
          Logg.e("selectedPath1", "OnactivityResult==>>" + selectedPath1); 
          imageLoader.displayImage(capturedImageUri.toString(), imgCarDetails1); 
} else { 
         Toast.show(getActivity(), "Please insert memory card to take pictures and make sure it is write able"); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

Добавить это разрешение в файле манифеста: -

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    @SuppressWarnings("deprecation") 
    Cursor cursor = getActivity().managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 
0

None ответов работал для меня, и я не мог использовать как при создании FileProvider, xml дает мне ошибку. Наконец-то я нашел этот ответ, который работает как шарм. Android Camera Intent: how to get full sized photo?

Смежные вопросы