NullPointer При сжатии растрового изображения

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

@Override
protected void onActivityResult(int requestCode, int resultCode, @NonNull Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_PIC_REQUEST1) {
            Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

            File destination = new File(Environment.getExternalStorageDirectory(),
                    System.currentTimeMillis() + ".jpg");

            FileOutputStream fo;
            try {
                destination.createNewFile();
                fo = new FileOutputStream(destination);
                fo.write(bytes.toByteArray());
                fo.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            image_String = SessionManager.encodeTobase64(thumbnail);
            Log.d("bm", image_String.toString());
            profile_pic.setImageBitmap(thumbnail);

        } else if (requestCode == SELECT_FILE1) {
            Uri selectedImageUri = data.getData();
            String[] projection = {MediaStore.MediaColumns.DATA};
            Cursor cursor = getContentResolver().query(selectedImageUri, projection, null, null,
                    null);
            int column_index = cursor.getColumnIndexOrThrow(projection[0]);
            cursor.moveToFirst();

            String selectedImagePath = cursor.getString(column_index);
            cursor.close();

            Bitmap bm;
            BitmapFactory.Options options = new BitmapFactory.Options();
 //         options.inJustDecodeBounds = true;
 //         BitmapFactory.decodeFile(selectedImagePath, options);
            final int REQUIRED_SIZE = 200;
            int scale = 1;
            while (options.outWidth / scale / 2 >= REQUIRED_SIZE
                    && options.outHeight / scale / 2 >= REQUIRED_SIZE)
                scale *= 2;
            options.inSampleSize = scale;
            bm = BitmapFactory.decodeFile(selectedImagePath, options);
            image_String = SessionManager.encodeTobase64(bm);
            Log.d("bm", image_String.toString());
            profile_pic.setImageBitmap(bm);
        }
    }
}

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

public static String encodeTobase64(Bitmap img){
    Bitmap image = img;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();
    String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);

    return imageEncoded;
}

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

0 ответов

Другие вопросы по тегам