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;
}
не может понять, что метод кодирования сигнализирует об ошибке при сжатии растрового изображения, взятого из галереи устройства. Пожалуйста, помогите мне