Android平台实现位图(Bitmap)的序列化和反序列化
2011-06-23 16:21
651 查看
对象被序列化后可被保存或传输,这个例子实现了位图的序列化和反序列化。
这次就对Android工程自带的”icon.png”进行下手。
程序运行后会在/data/data/breakan.serializable/目录下生成一个bitmap.bin文件,这个文件保存的就是MyBitmap的对象。
这次就对Android工程自带的”icon.png”进行下手。
程序运行后会在/data/data/breakan.serializable/目录下生成一个bitmap.bin文件,这个文件保存的就是MyBitmap的对象。
package breakan.serializable; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Bitmap.CompressFormat; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.widget.ImageView; import android.widget.TextView; public class SerializableActivity extends Activity { private Bitmap bitmap = null; private ObjectOutputStream oos = null; private ObjectInputStream ois = null; // myBitmap1是要被序列化的对象 private MyBitmap myBitmap1 = null; // myBitmap2是反序列化后得到的对象 private MyBitmap myBitmap2 = null; private TextView tv1 = null; private ImageView img1 = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.icon)) .getBitmap(); myBitmap1 = new MyBitmap(BytesBitmap.getBytes(bitmap), "icon.png"); tv1 = (TextView) findViewById(R.id.tv1); img1 = (ImageView) findViewById(R.id.img1); try { // 序列化myBitmap对象 oos = new ObjectOutputStream(new FileOutputStream( "/data/data/breakan.serializable/bitmap.bin")); oos.writeObject(myBitmap1); oos.flush(); // 反序列化myBitmap对象 ois = new ObjectInputStream(new FileInputStream( "/data/data/breakan.serializable/bitmap.bin")); myBitmap2 = (MyBitmap) ois.readObject(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (oos != null) { oos.close(); } if (ois != null) { ois.close(); } } catch (Exception e) { e.printStackTrace(); } } tv1.setText(myBitmap2.getName()); img1.setImageBitmap(BytesBitmap.getBitmap(myBitmap2.getBitmapBytes())); } } /** * 因为Bitmap没有实现序列化,所以不能直接在序列化类(MyBitmap)中使用 * BytesBitmap用于实现Bitmap和byte[]间的相互转换 * @author joran * */ class BytesBitmap { public static Bitmap getBitmap(byte[] data) { return BitmapFactory.decodeByteArray(data, 0, data.length); } public static byte[] getBytes(Bitmap bitmap) { ByteArrayOutputStream baops = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 0, baops); return baops.toByteArray(); } } /** * MyBitmap是要被序列化的类 * 其中包含了通过BytesBitmap类得到的Bitmap中数据的数组 * 和一个保存位图的名字的字符串,用于标识图片 * @author joran * */ class MyBitmap implements Serializable { /** * serialVersionUID解释: * http://www.blogjava.net/invisibletank/archive/2007/11/15/160684.html */ private static final long serialVersionUID = 1L; private byte[] bitmapBytes = null; private String name = null; public MyBitmap(byte[] bitmapBytes, String name) { // TODO Auto-generated constructor stub this.bitmapBytes = bitmapBytes; this.name = name; } public byte[] getBitmapBytes() { return this.bitmapBytes; } public String getName() { return this.name; } }
相关文章推荐
- Android平台实现位图(Bitmap)的序列化和反序列化
- Android实现Bitmap位图旋转效果
- Android 绘图基础:Bitmap(位图)与Matrix(矩阵)实现图片5种操作(平移、旋转、错切、缩放、对称)
- Android中通过Serializable实现对象序列化和反序列化
- Android平台Camera实时滤镜实现方法探讨(一)--JNI操作Bitmap
- android中位图Bitmap工具类的实现
- Android中Bitmap.createBitmap重载方总结 和 Android实现位图剪切
- Redis+protostuff 实现对象序列化保存,反序列化获取
- Android基础——序列化机制(实现Parcelable接口)
- Android平台下利用zxing实现二维码开发
- [023] Android平台的信息推送实现 .
- Google Protobuf Primer (1) 实现跨平台跨语言的序列化/反序列化
- javascript实现json的序列化和反序列化功能
- 【Android进阶】使用第三方平台ShareSDK实现新浪微博的一键分享功能
- Android中常用的位图操作(View与Bitmap转化、圆角、灰化、提取Alpha、旋转、倒影、剪切……)
- IO流实现对象的序列化和反序列化
- Android平台下利用zxing实现二维码开发
- 基于Android平台的串口通信实现
- Android平台Native代码的崩溃捕获机制及实现
- 位图bitmap的实现作用