大家都知道Bitmap沒有實現Serializable接口,如果想通過序列化的方式把Bitmap傳遞到下個目標的時候會報沒有序列化異常,比如有一個實體裏面有一個Bitmap的屬性,通過Bundle類的putSerializable()方法把實體傳遞到下一個Activity的時候就會報剛纔所說的異常,那怎麼辦呢,辦法總是會有的,可以通過把Bitmap轉換成字節數組,同時把存放位圖的Bitmap屬性替換成byte[],在需要顯示位圖的時候即可通過把字節數組轉換回來Bitmap。
- 原來的屬性:
- public Bitmap setPic(Bitmap pic){
- this.pic=pic;
- }
- 改成字節數組:
- public byte[] setPic(byte[] byte){
- this.pic=byte;
- }
下面介紹的是如何把Bitmap轉換成byte[ ]:
//該方法的方法參數爲一個Bitmap,最後返回的就是字節數組了。
- public static byte[] getBytes(Bitmap bitmap){
- //實例化字節數組輸出流
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- bitmap.compress(Bitmap.CompressFormat.PNG, 0, baos);//壓縮位圖
- return baos.toByteArray();//創建分配字節數組
- }
接着到把byte[ ]轉換回來Bitmap:
//該方法的方法參數爲一個字節數組,返回的就是Bitmap啦
- public static Bitmap getBitmap(byte[] data){
- return BitmapFactory.decodeByteArray(data, 0, data.length);//從字節數組解碼位圖
- }