Como converter bitmap para PNG e depois para base64 no Android?

Como o título sugere, eu estou tentando fazer com que o usuário do meu aplicativo Android selecione uma imagem do seu dispositivo (pronto), então eu quero escalar a imagem para baixo (pronto), comprimir / converter a imagem para png e enviá-la para uma API como uma string base64.

Então eu atualmente redimensiono a imagem assim:

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

Então eu tenho um bitmap, que eu quero converter em um PNG, e de lá para um base64. Eu encontrei algum código de exemplo para converter em um PNG e armazená-lo no dispositivoAqui.

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

O problema é que eu não quero salvar a imagem. Eu só quero mantê-lo na memória como um PNG e depois convertê-lo ainda mais para uma seqüência de caracteres base64.

Alguém sabe como eu poderia converter a imagem para um png e armazená-lo em uma variável dessa maneira, ou melhor ainda, convertê-lo para base64 imediatamente? Todas as dicas são bem vindas!

questionAnswers(1)

yourAnswerToTheQuestion