Растровое изображение всегда возвращает ноль в намерении камеры - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь захватить изображение с Android и загрузить на сервер, я сделал все разрешения кода времени выполнения, загрузки на сервер и все.но мое растровое изображение от намерения камеры является нулевым. Я пытаюсь получить getExtras и все пути.Для меня код кажется правильным, но растровое изображение всегда равно нулю.В чем может быть причина

Попытка использования

 data.getExtras().get("data"); 

, как здесь onActivityResult, возвращенный с камеры, Intent null

, но не помогло

Мой код для выполнения намерения камеры при нажатии кнопки

  CaptureImageFromCamera.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

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

            startActivityForResult(intent, 7);

        }
    });


 // Star activity for result method to Set captured image on image view 
 after click.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 7 && resultCode == RESULT_OK && data != null && 
   data.getData() != null) {

        Uri uri = data.getData();

        // Adding captured image in bitmap.
        // if(data.getData()==null){
        bitmap = (Bitmap)data.getExtras().get("data");
        //}//else{
        // bitmap = 
    MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
        //}
        //  bitmap = 
    MediaStore.Images.Media.getBitmap(getContentResolver(), uri);

        // adding captured image in imageview.
        ImageViewHolder.setImageBitmap(bitmap);

    }

}

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

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

В onActivityResult(), у вас есть:

if (requestCode == 7 && resultCode == RESULT_OK && data != null && 
    data.getData() != null) {

Первые три части этого в порядке. Однако у data.getData() != null есть две проблемы:

  1. Это не имеет значения, так как блок if не пытается использовать data.getData() (хотя вы закомментировали код, который это делает)

  2. data.getData() должно быть null для ACTION_IMAGE_CAPTURE, поэтому для правильно реализованных приложений камеры ваше условие if всегда будет false

Если вы удалите data.getData() != null, вы должны войти в блок if и попытаться получить ваш Bitmap.

Как уже отмечали другие, этот код даст вам уменьшенное изображение размером Bitmap. Если вы ищете приложение камеры, чтобы получить изображение с полным разрешением, вам нужно будет использовать EXTRA_OUTPUT. Этот пример приложения демонстрирует, как это делается.

0 голосов
/ 30 апреля 2019
private void choosePhotoFromCamera() {
        log.info("choosePhotoFromCamera() is called");

        intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 1);
    }


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    }

    // choose profile image from CAMERA
    if (requestCode == 1) {
        try {

           Bitmap bitmap = (Bitmap) data.getExtras().get("data");

            if (bitmap != null) {
                imageView.setImageBitmap(bitmap);
                strImagePath = getImageUri(bitmap).toString();
            }

        } catch (Exception e) {
            log.error("Exception after choosing image from camera : " + e.getMessage());
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...