Sérialisation et dé-sérialisation de android.graphics.Bitmap en Java

J'ai commencé à travailler sur ma première application android et les principes de base d'une application qui gère une image avec plusieurs couches. Je suis en mesure d'exporter une version plate du projet en tant que fichier de PNG, mais je voudrais être en mesure de sauver l'image superposée pour, plus tard, l'édition (y compris toutes les options appliquées à certaines couches, telles que le texte en fonction des couches).

De toute façon, j'ai veillé à ce que les classes qui doivent être écrites dans un fichier sont "Serializable", mais dans un peu d'un bloc de route causé par le fait que android.les graphiques.Bitmap n'est pas sérialisable. Le code suivant essentiellement les sorties de l'image Bitmap au format PNG dans un objet ByteArray et devraient le lire en tant que partie de la "readObject'. Toutefois, lorsque le code s'exécute - je peux vérifier que le "imageByteArrayLength' variable qui est lu est la même que celle qui est sortie mais la "Bitmap de l'image" est toujours null.

Toute aide serait grandement appréciée. Merci pour la lecture.

private String title;
private int width;
private int height;
private Bitmap sourceImage;
private Canvas sourceCanvas;        
private Bitmap currentImage;
private Canvas currentCanvas;   
private Paint currentPaint; 
private void writeObject(ObjectOutputStream out) throws IOException{
out.writeObject(title);
out.writeInt(width);
out.writeInt(height);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
currentImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] imageByteArray = stream.toByteArray();
int length = imageByteArray.length;
out.writeInt(length);
out.write(imageByteArray);          
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
this.title = (String)in.readObject();
this.width = in.readInt();
this.height = in.readInt();
int imageByteArrayLength = in.readInt();
byte[] imageByteArray = new byte[imageByteArrayLength];
in.read(imageByteArray, 0, imageByteArrayLength);
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap image = BitmapFactory.decodeByteArray(imageByteArray, 0, imageByteArrayLength, opt);
sourceImage = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
currentImage = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
sourceCanvas = new Canvas(sourceImage);
currentCanvas = new Canvas(currentImage);
currentPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
if ( image != null ) {
sourceCanvas.drawBitmap(image, 0, 0, currentPaint);
}
}   

source d'informationauteur John Wordsworth | 2011-05-03