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列に変換できてもいいような気がするけどわかんなかった。