Android bitmap序列化

最近在开发中需要用到图片bitmap的序列化并进行传递,发现bitmap是没有序列化的,下面是自己实现的一个序列化方法,分享下。
----------------------------------------------------------------------------------------------------------
import java.io.ByteArrayOutputStream;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
import android.os.Parcel;
import android.os.Parcelable;

/**
*@author tcwkid
*@date 2011-12-07
*/
public class DetailIcon implements Parcelable{

private Bitmap draw;
private static byte[] byteDraw;

public Bitmap getDraw() {
return draw;
}

public void setDraw(Bitmap draw) {
this.draw = draw;
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
byteDraw=getBytes(draw);
dest.writeByteArray(byteDraw);//其实这里写入是有顺序的,先写的先读
}

public static final Parcelable.Creator CREATOR=new Creator() {

@Override
public DetailIcon[] newArray(int size) {
return new DetailIcon[size];
}

@Override
public DetailIcon createFromParcel(Parcel source) {
DetailIcon di=new DetailIcon();
source.readByteArray(byteDraw);
di.setDraw(getBitmap(byteDraw));
return di;
}
};

private static Bitmap getBitmap(byte[] data) {
return BitmapFactory.decodeByteArray(data, 0, data.length);
}

private byte[] getBytes(Bitmap bitmap) {
ByteArrayOutputStream baops = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, baops);
return baops.toByteArray();
}
}

----------------------------------------------------------------------------------------------------------
以上是通过byte[]来进行序列化的,因为bitmap是没有序列化的,需要我们去实现,可以选择继承bitmap实现序列化,这里采用byte[]方式。
接下来就可以使用Intent的putExtra(String name,Parcelable value)来发送bitmap了。

For more complete information about compiler optimizations, see our Optimization Notice.