Как преобразовать растровое изображение в PNG, а затем в base64 в Android?

Как видно из названия, я пытаюсь заставить пользователя моего приложения для Android выбрать изображение на своем устройстве (готово), затем я хочу уменьшить изображение (готово), сжать / преобразовать изображение в png и отправить его к API в виде строки base64.

В настоящее время я изменяю размер изображения следующим образом:

options.inSampleSize = calculateInSampleSize(options, MAX_IMAGE_DIMENSION, MAX_IMAGE_DIMENSION);
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);

Затем у меня есть растровое изображение, которое я хочу преобразовать в PNG, а оттуда - в base64. Я нашел пример кода для преобразования в PNG и сохранения его на устройствеВот.

try {
       FileOutputStream out = new FileOutputStream(filename);
       bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
       out.close();
} catch (Exception e) {
       e.printStackTrace();
}

Проблема в том, что я не хочу сохранять изображение. Я просто хочу сохранить его в памяти как PNG, а затем преобразовать его в строку base64.

Кто-нибудь знает, как я могу преобразовать изображение в png и сохранить его в переменной таким образом, или, что еще лучше, немедленно преобразовать его в base64? Все советы приветствуются!