Растровое изображение равно нулю при захвате изображения с камеры

#java #android #bitmap #android-bitmap

#java #Android #растровое изображение #android-bitmap

Вопрос:

Мой код отлично работает на уровне API <= 19, но в более поздней версии я получаю bitmap null.

 public void SelectImage() {
        final CharSequence[] items = {"Camera", "Gallery", "Cancel"};

        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.add_image);
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int i) {
                if (items[i].equals("Camera")) {
                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    if (intent.resolveActivity(mainActivity.getPackageManager()) != null) {
                        startActivityForResult(intent, REQUEST_CAMERA);
                    }
                } else if (items[i].equals("Gallery")) {
                    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    intent.setType("image/*");
                    startActivityForResult(intent, SELECT_FILE);

                } else if (items[i].equals("Cancel")) {
                    dialog.dismiss();
                }

            }
        });


public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == RESULT_OK) {
                place = PlacePicker.getPlace(data, mainActivity);
                etAddress1.setText(place.getAddress());
            }
        } else if (resultCode == Activity.RESULT_OK amp;amp; data != null) {

            Glide.with(this).load(data.getData()).into(ivprofile);
            Bitmap bm = null;
            try {
                bm = MediaStore.Images.Media.getBitmap(mainActivity.getContentResolver(), data.getData());
            } catch (IOException e) {
                e.printStackTrace();
            }
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.JPEG, 50, baos);
            byte[] b = baos.toByteArray();
            base64img = Base64.encodeToString(b, Base64.NO_WRAP);
        }
    }
 

Здесь мой bm равен нулю, почему это происходит, я использую более старую версию кода или есть что-то еще.. Заранее спасибо.

Ответ №1:

На самом деле, существует библиотека, которая работает с каждым телефоном и каждой версией Android. Если вам нужно решить вашу проблему, вот ответ. EasyImage выполнил свою работу!

не забывайте обрабатывать разрешения api 23 и выше!