BitmapDrawableをSerializeしたい

かなり前の話だけど書いておく。
アイコンとかの画像をキャッシュしておきたいなー。という需要がありました。
外部にファイルpngファイルで持つより処理速度早そう(未検証
とか
必要なデータを1ファイルに詰め込みたい。データとアイコンをセットにしたものをいくつかまとめて持ちたい!
とか
そんな需要がありました。
具体的にはDroppShareでアプリデータのキャッシュ作成とアプリデータ交換のデータファイルの代わりに…。

具体的な方法

直接BitmapDrawableを直接変換する方法わからかったので代替案

private class SerializableBitmapWrapper implements Serializable {
    private static final long serialVersionUID = AppData.serialVersionUID;

    private byte[] mBitmapArray = null;
    private transient Bitmap mBitmap = null;

    public SerializableBitmapWrapper(Bitmap bitmap) {
        mBitmap = bitmap;

        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        mBitmap.compress(Bitmap.CompressFormat.PNG, COMPRESS_QUALITY, bout);
        mBitmapArray = bout.toByteArray();
    }

    public Bitmap getBitmap() {
        if (mBitmapArray == null) {
            return null;
        }
        Bitmap bitmap = BitmapFactory.decodeByteArray(mBitmapArray, 0,
        mBitmapArray.length);
        return bitmap;
    }
}

こんなクラスに突っ込んでやって変換するとか。BitmapDrawable#getBitmapでBitmap取れます。
readObjectとwriteObject書いてやって自動変換してやるとお手軽に使えるかも!

http://bit.ly/chmlYw ←自分のソースで実際に使ってる箇所

この手法は @hidecheck さんに教えてもらいました!
http://twitter.com/hidecheck/status/12404709533

思う事

ParcelableなんだからByte列に変換できてもいいような気がするけどわかんなかった。