Bitmap cambia de color mientras se comprime a png

Actualmente estoy trabajando en una aplicación de Android steganogrpahy como un proyecto de clase. He creado un objeto que codificará una imagen en otra imagen y devolverá un mapa de bits codificado. Este código se ejecuta en un hilo separado.

new Thread(new Runnable()  
{  
   public void run()  
    {  
        Bitmap encoded_image = null;  
        Encryptor encryptor = new Encryptor();  
        encoded_image = encryptor.encode_image_in_image(  
            image_location,message_image_location);  
    }  
}).start();

Después de codificar el mapa de bits, estaba pasando el mapa de bits a una actividad del explorador de archivos que he creado para guardar el mapa de bits como una imagen png. Sin embargo, este método funciona para imágenes más pequeñas, cuando una imagen grande se codifica y se pasa a la actividad secundaria, la aplicación se congela y vuelve a la actividad principal.

private void pass_image_to_file_browser( Bitmap image )
{
    Intent intent = new Intent(Encrypt.this,FileBrowser.class);
    intent.putExtra( Intent.EXTRA_STREAM, image );
    startActivity( intent );
}

@Override
 public void onCreate(Bundle savedInstanceState) 
 {
    super.onCreate(savedInstanceState);
    Bundle bundle = this.getIntent().getExtras();
    Bitmap image = bundle.getParacable(Intent.EXTRA_STREAM);
 }

Estaba asumiendo que un mapa de bits grande era demasiado grande para enviarlo entre actividades usando una intención, así que decidí simplemente guardar la imagen en una ubicación temporal y pasar la ubicación de la imagen a la actividad secundaria. Lo que luego guarda la imagen png donde el usuario especifica y elimina el archivo de imagen temporal.

private void save_bitmap( Bitmap image, String location )
{
    FileOutputStream fileOutputStream = new FileOutputStream(location);
    BufferedOutputStream buffered_output_stream = new 
        BufferOutputStream(fileOutputStream);
    image.compress(CompressFormat.PNG, 0, buffered_output_stream);
    buffered_output_stream.flush();
    buffered_output_stream.close();
}

Esto resuelve el problema de enviar un gran mapa de bits de una actividad a otra, sin embargo, ha creado un nuevo problema que no he podido resolver. Tanto la imagen temporal que se guarda antes de pasar la ubicación del archivo a la actividad secundaria como el archivo de imagen después de volver a guardar la imagen usando el explorador de archivos han cambiado ligeramente de color. Este cambio de color es irreconocible a simple vista, pero al decodificar la imagen causa muchos problemas. Un pensamiento que tuve fue que el Bitmap.Config estaba cambiando de ARGB_8888 a ARGB_4444 o RGB_565, sin embargo, después de la depuración, este no es el caso. El mapa de bits se instancia como un ARGB_8888 y se guarda como un mapa de bits ARGB_8888 y nunca cambia en el medio. El código aún funciona si paso todo el mapa de bits a la actividad del explorador de archivos y estoy guardando los mapas de bits exactamente igual en ambos lugares. No tengo ninguna idea sobre qué más podría estar causando esto. Estoy buscando sugerencias sobre qué más podría estar causando el problema. Lo siento, iba a publicar imágenes en la salida en ambos casos, sin embargo, el desbordamiento de la pila no me dejaba en mi nivel de reputación Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta