`

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了。

分享到:
评论

相关推荐

    Android中的Bitmap序列化失败的解决方法

    本文将详细介绍如何解决Android中Bitmap序列化失败的问题,并提供相关的解决方案。 首先,当尝试将一个包含Bitmap字段的对象进行序列化时,系统会抛出异常,提示"android.graphics.Bitmap"不支持序列化。这是因为...

    Android Bitmap压缩方法的选择详解

    在Android开发中,Bitmap对象是处理图像数据的核心类,但如果不正确地管理Bitmap,可能会导致内存溢出等问题。本篇文章将深入探讨Android Bitmap的压缩方法,特别是如何选择合适的压缩策略以适应不同的场景需求,...

    Android序列化传递数据

    序列化是将对象转换为可存储或传输格式的过程,而在Android中,有两种主要的序列化方式:Parcelable和Serializable。下面将详细介绍这两种序列化机制及其在数据传递中的应用。 **Parcelable** 是Android特有的序列...

    Android-ImageFrame高效省内存播放序列帧动画控件

    2. **多样化的数据来源**:`Android-ImageFrame`支持从不同来源读取序列帧,包括本地文件系统和资源(resource)。这种灵活性使得开发者可以根据项目需求方便地选择数据源,无论是本地存储的图片序列还是应用程序...

    android bitmap

    #### 三、Bitmap的序列化与反序列化 ##### 1. Bitmap转Byte数组 ```java private byte[] Bitmap2Bytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap....

    将Bitmap转成byte[]小例子

    这个过程涉及到图像数据的序列化和反序列化。下面将详细介绍如何在Android中将Bitmap转换为byte[],以及如何从byte[]还原为Bitmap。 1. Bitmap转byte[] 要将Bitmap对象转换为byte数组,我们可以使用Bitmap的...

    android数据Bitmap数据的过程

    有时为了应用的需求,我们需要将这些`Bitmap`数据持久化到数据库中以便后续使用。本文档将详细介绍如何在Android中通过自定义`SQLiteOpenHelper`子类来实现`Bitmap`数据的存储和读取过程。 #### 二、核心概念与原理...

    Activity跳转时传递Bitmap对象

    这是一种高效的数据序列化方式,可以直接在内存中传递数据,避免了Intent extras的大小限制。 ```java // 自定义一个Parcelable类,包含Bitmap public class BitmapParcelable implements Parcelable { private ...

    Android传递Bitmap对象在两个Activity之间

    1. 使用Parcelable接口:Bitmap不是直接可序列化的,但我们可以实现Parcelable接口,将Bitmap转换为字节数组,然后在Intent中传递。接收Activity再将字节数组还原为Bitmap。这种方式比较高效,但需要自定义序列化和...

    Android序列化之Parcelable和Serializable的使用详解

    * Parcelable 接口是 Android 平台下的序列化接口,通常跨进程传递的数据都要正确实现这个接口,比如 Intent,Bitmap 等。Parcelable 实现起来比 Serializable 复杂,但性能较好。使用场景:在内存中实现序列化,...

    Android-ImageToVideoAndroid用于将图像轻松转换成视频

    - **初始化**:创建`ImageToVideo`对象,并配置所需的参数,如输出视频路径、分辨率、帧率等。 - **添加图片**:调用`addImage()`方法,传入图片资源或本地文件路径。 - **执行转换**:最后调用`convert()`方法,...

    Android Intent传递数据大小限制详解

    Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent发送不成功,logcat...

    s4-png:将S4 PNG Java序列化的对象转换为实际图像

    s4-png 将S4 PNG Java序列化的对象转换为实际图像三星Galaxy S4库存浏览器创建的PNG文件实际上是TabData序列化的对象。 该程序将存储在TabData对象中的位图数据转换为可通过普通照片软件查看的PNG文件。编译javac * ...

    利用AIDL进程间传输图片例子

    由于Bitmap对象不能直接通过AIDL传递,我们需要将Bitmap转换为其他可序列化的形式,如ByteArrayOutputStream,然后再在服务端反序列化恢复为Bitmap。这一步通常涉及到性能优化,如使用ParcelFileDescriptor进行大...

    android数据缓存

    "android数据缓存"主要涉及如何有效地管理和存储各种类型的数据,如字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的Java对象以及byte数据。下面将详细介绍这些知识点。 1. **数据缓存的优势** - 提升...

    基于Android的拼图游戏APP源码,Android拼图游戏APP源码,Android小游戏源码

    这通常涉及到SharedPreferences或序列化技术。 最后,Android的Activity生命周期管理也是重要的一环。源码中会体现出如何在onCreate、onStart、onResume、onPause、onStop和onDestroy等方法中妥善处理游戏的状态。 ...

    Android手绘路径,获取点集,曲线运动

    这个过程涉及到的主要知识点包括Android的Canvas、MotionEvent、Path对象以及数据序列化。 1. **Canvas与MotionEvent**: Canvas是Android图形系统中的核心组件,它提供了在Bitmap上绘图的能力。在手绘路径时,我们...

    Android 画图程序源码-IT计算机-毕业设计.zip

    这涉及到Bitmap的序列化(保存为PNG或JPEG格式)和反序列化(从文件加载回Bitmap)。 8. **权限管理**: 如果应用需要读写外部存储,需要在AndroidManifest.xml中声明READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_...

Global site tag (gtag.js) - Google Analytics