图像序列化
来源:互联网 发布:中国知名人工智能专家 编辑:程序博客网 时间:2024/05/16 14:12
我们都知道,图像对象可以编码成指定图像格式文件保存在硬盘上,需要时再对其进行解码读入内存。但是除了这样还有别的办法可以将图像对象保存在硬盘上吗? 熟悉Java I/O 的人也许可以想到采用对象序列化(Object serialization)试一试,很好,但是如果你研究了 BufferedImage 类的结构后就会大失所望(至少当时我是这样)。
BufferedImage 提供一般图像管理。BufferedImage 对象包括另外两个对象:Raster 和 ColorModel。Raster 对象包含另外两个对象:DataBuffer 和 SampleModel。不幸的是,他们都没有实现序列化所必需的 Serializable 接口,所以无法直接对他们进行对象序列化。
我在学习 JAI 的时候发现了 javax.media.jai.remote 包里有一个类 SerializableRenderedImage,这个类实现了RenderedImage, Serializable 接口,可以将 RanderedImage 对象作为构造函数的参数实例化一个可以序列化的图像对象。
查看JDK的文档可以知道无论 Java 2D 中的 BufferedImage 还是 JAI 中的 PlanarImage 都实现了 RenderedImage 接口,也就是说所有实现自 RenderedImage 接口的对象均可作为参数包装出一个 SerializableRenderedImage 类型对象,将其序列化。
下面是一个简单的例子说明了这个类的使用方法:
BufferedImage 提供一般图像管理。BufferedImage 对象包括另外两个对象:Raster 和 ColorModel。Raster 对象包含另外两个对象:DataBuffer 和 SampleModel。不幸的是,他们都没有实现序列化所必需的 Serializable 接口,所以无法直接对他们进行对象序列化。
我在学习 JAI 的时候发现了 javax.media.jai.remote 包里有一个类 SerializableRenderedImage,这个类实现了RenderedImage, Serializable 接口,可以将 RanderedImage 对象作为构造函数的参数实例化一个可以序列化的图像对象。
查看JDK的文档可以知道无论 Java 2D 中的 BufferedImage 还是 JAI 中的 PlanarImage 都实现了 RenderedImage 接口,也就是说所有实现自 RenderedImage 接口的对象均可作为参数包装出一个 SerializableRenderedImage 类型对象,将其序列化。
下面是一个简单的例子说明了这个类的使用方法:
import java.io.*;
import javax.media.jai.remote.*;
import java.awt.image.*;
public class SomeSerializableClass implements Serializable {
protected transient RenderedImage image;
public SomeSerializableClass(RenderedImage image) {
this.image = image;
}
// Serialization method.
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeObject(new SerializableRenderedImage(image, true));
}
// Deserialization method.
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
image = (RenderedImage) in.readObject();
}
}
import javax.media.jai.remote.*;
import java.awt.image.*;
public class SomeSerializableClass implements Serializable {
protected transient RenderedImage image;
public SomeSerializableClass(RenderedImage image) {
this.image = image;
}
// Serialization method.
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeObject(new SerializableRenderedImage(image, true));
}
// Deserialization method.
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
image = (RenderedImage) in.readObject();
}
}
- 图像序列化
- Java 图像对象序列化
- VTK读取序列化图像
- OPENCV图像处理基础(六)序列化储存图像
- .net 序列化文件(图像)成xml
- VTK读取序列图像
- 图像序列合成视频
- 将视频序列转换为图像序列
- VTK序列图像的读取
- Dos图像复制成序列
- VTK序列图像的读取
- openCV2连续读取图像序列
- Opencv 视频转为图像序列
- 使用opencv读取图像序列
- VTK序列图像的读取
- opencv序列图像ROI获取
- opencv中序列图像相加
- VTK序列图像的读取
- Design Patterns学习笔记:Decorator装饰模式
- XP配置IIS+ASP详解(新手本机调试ASP必读)
- ultrachart的使用(一):从数据库中提取数据
- 安装vsftp
- 图像在网络中的传输
- 图像序列化
- 如何在XSL中得到某节点到根节点的全路径的所有节点?
- 一个应用程序通信的问题---SQL 触发器
- 预览待上传的本地图片
- EMF.edit framework(二)
- JavaScript就这么回事
- 《程序员》“工具”栏目近期选题:程序员,自己写工具!
- 迷茫……
- 利用XSL对XML数据进行加密和大小写转换