[Image] 使用JAI將實(shí)現(xiàn)RenderedImage接口的圖像對(duì)象序列化
我們都知道,圖像對(duì)象可以編碼成指定圖像格式文件保存在硬盤上,需要時(shí)再對(duì)其進(jìn)行解碼讀入內(nèi)存。但是除了這樣還有別的辦法可以將圖像對(duì)象保存在硬盤上嗎?熟悉Java I/O 的人也許可以想到采用對(duì)象序列化(Object serialization)試一試,很好,但是如果你研究了 BufferedImage?類的結(jié)構(gòu)后就會(huì)大失所望(至少當(dāng)時(shí)我是這樣)。
BufferedImage?提供一般圖像管理。BufferedImage 對(duì)象包括另外兩個(gè)對(duì)象:Raster 和 ColorModel。Raster 對(duì)象包含另外兩個(gè)對(duì)象:DataBuffer 和 SampleModel。不幸的是,他們都沒有實(shí)現(xiàn)序列化所必需的 Serializable 接口,所以無法直接對(duì)他們進(jìn)行對(duì)象序列化。
我在學(xué)習(xí) JAI 的時(shí)候發(fā)現(xiàn)了 javax.media.jai.remote 包里有一個(gè)類 SerializableRenderedImage,這個(gè)類實(shí)現(xiàn)了RenderedImage, Serializable 接口,可以將 RanderedImage 對(duì)象作為構(gòu)造函數(shù)的參數(shù)實(shí)例化一個(gè)可以序列化的圖像對(duì)象。
public final class SerializableRenderedImage
SerializableRenderedImage(RenderedImage?source) ??????????Constructs a SerializableRenderedImage wrapper for a RenderedImage source. |
SerializableRenderedImage(RenderedImage?source, boolean?useDeepCopy) ??????????Constructs a SerializableRenderedImage wrapper for a RenderedImage source. |
SerializableRenderedImage(RenderedImage?source, boolean?useDeepCopy, OperationRegistry?registry, String?formatName, TileCodecParameterList?encodingParam, TileCodecParameterList?decodingParam) ??????????Constructs a SerializableRenderedImage wrapper for a RenderedImage source. |
查看JDK的文檔可以知道無論 Java 2D 中的 BufferedImage 還是 JAI 中的 PlanarImage 都實(shí)現(xiàn)自 RenderedImage 接口,也就是說所有實(shí)現(xiàn)自 RenderedImage 接口的對(duì)象均可作為參數(shù)包裝出一個(gè) SerializableRenderedImage 類型對(duì)象,將其序列化。
下面是一個(gè)簡單的例子說明了這個(gè)類的使用方法:







































posted on 2005-10-18 17:36 leon 閱讀(2842) 評(píng)論(1) 編輯 收藏 所屬分類: Java Media