最近在开发中需要用到图片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序列化失败的问题,并提供相关的解决方案。 首先,当尝试将一个包含Bitmap字段的对象进行序列化时,系统会抛出异常,提示"android.graphics.Bitmap"不支持序列化。这是因为...
在Android开发中,Bitmap对象是处理图像数据的核心类,但如果不正确地管理Bitmap,可能会导致内存溢出等问题。本篇文章将深入探讨Android Bitmap的压缩方法,特别是如何选择合适的压缩策略以适应不同的场景需求,...
序列化是将对象转换为可存储或传输格式的过程,而在Android中,有两种主要的序列化方式:Parcelable和Serializable。下面将详细介绍这两种序列化机制及其在数据传递中的应用。 **Parcelable** 是Android特有的序列...
2. **多样化的数据来源**:`Android-ImageFrame`支持从不同来源读取序列帧,包括本地文件系统和资源(resource)。这种灵活性使得开发者可以根据项目需求方便地选择数据源,无论是本地存储的图片序列还是应用程序...
#### 三、Bitmap的序列化与反序列化 ##### 1. Bitmap转Byte数组 ```java private byte[] Bitmap2Bytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap....
这个过程涉及到图像数据的序列化和反序列化。下面将详细介绍如何在Android中将Bitmap转换为byte[],以及如何从byte[]还原为Bitmap。 1. Bitmap转byte[] 要将Bitmap对象转换为byte数组,我们可以使用Bitmap的...
有时为了应用的需求,我们需要将这些`Bitmap`数据持久化到数据库中以便后续使用。本文档将详细介绍如何在Android中通过自定义`SQLiteOpenHelper`子类来实现`Bitmap`数据的存储和读取过程。 #### 二、核心概念与原理...
这是一种高效的数据序列化方式,可以直接在内存中传递数据,避免了Intent extras的大小限制。 ```java // 自定义一个Parcelable类,包含Bitmap public class BitmapParcelable implements Parcelable { private ...
1. 使用Parcelable接口:Bitmap不是直接可序列化的,但我们可以实现Parcelable接口,将Bitmap转换为字节数组,然后在Intent中传递。接收Activity再将字节数组还原为Bitmap。这种方式比较高效,但需要自定义序列化和...
* Parcelable 接口是 Android 平台下的序列化接口,通常跨进程传递的数据都要正确实现这个接口,比如 Intent,Bitmap 等。Parcelable 实现起来比 Serializable 复杂,但性能较好。使用场景:在内存中实现序列化,...
- **初始化**:创建`ImageToVideo`对象,并配置所需的参数,如输出视频路径、分辨率、帧率等。 - **添加图片**:调用`addImage()`方法,传入图片资源或本地文件路径。 - **执行转换**:最后调用`convert()`方法,...
Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent发送不成功,logcat...
由于Bitmap对象不能直接通过AIDL传递,我们需要将Bitmap转换为其他可序列化的形式,如ByteArrayOutputStream,然后再在服务端反序列化恢复为Bitmap。这一步通常涉及到性能优化,如使用ParcelFileDescriptor进行大...
s4-png 将S4 PNG Java序列化的对象转换为实际图像三星Galaxy S4库存浏览器创建的PNG文件实际上是TabData序列化的对象。 该程序将存储在TabData对象中的位图数据转换为可通过普通照片软件查看的PNG文件。编译javac * ...
"android数据缓存"主要涉及如何有效地管理和存储各种类型的数据,如字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的Java对象以及byte数据。下面将详细介绍这些知识点。 1. **数据缓存的优势** - 提升...
这通常涉及到SharedPreferences或序列化技术。 最后,Android的Activity生命周期管理也是重要的一环。源码中会体现出如何在onCreate、onStart、onResume、onPause、onStop和onDestroy等方法中妥善处理游戏的状态。 ...
这个过程涉及到的主要知识点包括Android的Canvas、MotionEvent、Path对象以及数据序列化。 1. **Canvas与MotionEvent**: Canvas是Android图形系统中的核心组件,它提供了在Bitmap上绘图的能力。在手绘路径时,我们...
这涉及到Bitmap的序列化(保存为PNG或JPEG格式)和反序列化(从文件加载回Bitmap)。 8. **权限管理**: 如果应用需要读写外部存储,需要在AndroidManifest.xml中声明READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_...