﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Do you drink java?-随笔分类-Java Media</title><link>http://www.blogjava.net/leon/category/2181.html</link><description>&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;像写情书一样coding</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 12:27:23 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 12:27:23 GMT</pubDate><ttl>60</ttl><item><title>[Image] 使用JAI将实现RenderedImage接口的图像对象序列化</title><link>http://www.blogjava.net/leon/archive/2005/10/18/15830.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Tue, 18 Oct 2005 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2005/10/18/15830.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/15830.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2005/10/18/15830.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/15830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/15830.html</trackback:ping><description><![CDATA[<P>我们都知道，图像对象可以编码成指定图像格式文件保存在硬盘上，需要时再对其进行解码读入内存。但是除了这样还有别的办法可以将图像对象保存在硬盘上吗？熟悉Java I/O 的人也许可以想到采用对象序列化（Object serialization）试一试，很好，但是如果你研究了 BufferedImage 类的结构后就会大失所望（至少当时我是这样）。<BR><IMG style="WIDTH: 325px; HEIGHT: 212px" height=373 alt=BufferedImage.jpg src="http://www.blogjava.net/images/blogjava_net/leon/program/BufferedImage.jpg" width=547 border=0><BR><BR>BufferedImage 提供一般图像管理。BufferedImage 对象包括另外两个对象：Raster 和 ColorModel。Raster 对象包含另外两个对象：DataBuffer 和 SampleModel。不幸的是，他们都没有实现序列化所必需的 Serializable 接口，所以无法直接对他们进行对象序列化。<BR><BR>我在学习 JAI 的时候发现了 javax.media.jai.remote 包里有一个类 SerializableRenderedImage，这个类实现了RenderedImage, Serializable 接口，可以将 RanderedImage 对象作为构造函数的参数实例化一个可以序列化的图像对象。</P>
<DT><STRONG><A href="http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/remote/SerializableRenderedImage.html">javax.media.jai.remote.SerializableRenderedImage<BR></A></STRONG><BR>public final class <B>SerializableRenderedImage</B> 
<DT>extends <A href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> 
<DT>implements <A href="http://java.sun.com/j2se/1.3/docs/api/java/awt/image/RenderedImage.html">RenderedImage</A>, <A href="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A><BR><BR>
<TABLE cellSpacing=0 cellPadding=3 width="60%" border=1>
<TBODY>
<TR class=TableRowColor bgColor=white>
<TD><CODE><B><A href="http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/remote/SerializableRenderedImage.html#SerializableRenderedImage(java.awt.image.RenderedImage)">SerializableRenderedImage</A></B>(<A href="http://java.sun.com/j2se/1.3/docs/api/java/awt/image/RenderedImage.html">RenderedImage</A> source)</CODE> <BR>          Constructs a <CODE>SerializableRenderedImage</CODE> wrapper for a <CODE>RenderedImage</CODE> source.</TD></TR>
<TR class=TableRowColor bgColor=white>
<TD><CODE><B><A href="http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/remote/SerializableRenderedImage.html#SerializableRenderedImage(java.awt.image.RenderedImage, boolean)">SerializableRenderedImage</A></B>(<A href="http://java.sun.com/j2se/1.3/docs/api/java/awt/image/RenderedImage.html">RenderedImage</A> source, boolean useDeepCopy)</CODE> <BR>          Constructs a <CODE>SerializableRenderedImage</CODE> wrapper for a <CODE>RenderedImage</CODE> source.</TD></TR>
<TR class=TableRowColor bgColor=white>
<TD><CODE><B><A href="http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/remote/SerializableRenderedImage.html#SerializableRenderedImage(java.awt.image.RenderedImage, boolean, javax.media.jai.OperationRegistry, java.lang.String, javax.media.jai.tilecodec.TileCodecParameterList, javax.media.jai.tilecodec.TileCodecParameterList)">SerializableRenderedImage</A></B>(<A href="http://java.sun.com/j2se/1.3/docs/api/java/awt/image/RenderedImage.html">RenderedImage</A> source, boolean useDeepCopy, <A href="http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/OperationRegistry.html">OperationRegistry</A> registry, <A href="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> formatName, <A href="http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/tilecodec/TileCodecParameterList.html">TileCodecParameterList</A> encodingParam, <A href="http://java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/tilecodec/TileCodecParameterList.html">TileCodecParameterList</A> decodingParam)</CODE> <BR>          Constructs a <CODE>SerializableRenderedImage</CODE> wrapper for a <CODE>RenderedImage</CODE> source.</TD></TR></TBODY></TABLE><BR>查看JDK的文档可以知道无论 Java 2D 中的 BufferedImage 还是 JAI 中的 PlanarImage 都实现自 RenderedImage 接口，也就是说所有实现自 RenderedImage 接口的对象均可作为参数包装出一个 SerializableRenderedImage 类型对象，将其序列化。<BR><BR>下面是一个简单的例子说明了这个类的使用方法：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.io.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> javax.media.jai.remote.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.awt.image.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> SomeSerializableClass<BR><IMG id=Codehighlighter1_141_719_Open_Image onclick="this.style.display='none'; Codehighlighter1_141_719_Open_Text.style.display='none'; Codehighlighter1_141_719_Closed_Image.style.display='inline'; Codehighlighter1_141_719_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_141_719_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_141_719_Closed_Text.style.display='none'; Codehighlighter1_141_719_Open_Image.style.display='inline'; Codehighlighter1_141_719_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">implements</SPAN><SPAN style="COLOR: #000000"> Serializable </SPAN><SPAN id=Codehighlighter1_141_719_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_141_719_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>  </SPAN><SPAN style="COLOR: #0000ff">protected</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">transient</SPAN><SPAN style="COLOR: #000000"> RenderedImage image;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>  </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"> Fields omitted.</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_261_289_Open_Image onclick="this.style.display='none'; Codehighlighter1_261_289_Open_Text.style.display='none'; Codehighlighter1_261_289_Closed_Image.style.display='inline'; Codehighlighter1_261_289_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_261_289_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_261_289_Closed_Text.style.display='none'; Codehighlighter1_261_289_Open_Image.style.display='inline'; Codehighlighter1_261_289_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>  </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> SomeSerializableClass(RenderedImage image) </SPAN><SPAN id=Codehighlighter1_261_289_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_261_289_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.image </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> image;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>  }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>  </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"> Methods omitted.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>  </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"> Serialization method.</SPAN><SPAN style="COLOR: #008000"><BR><IMG id=Codehighlighter1_412_511_Open_Image onclick="this.style.display='none'; Codehighlighter1_412_511_Open_Text.style.display='none'; Codehighlighter1_412_511_Closed_Image.style.display='inline'; Codehighlighter1_412_511_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_412_511_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_412_511_Closed_Text.style.display='none'; Codehighlighter1_412_511_Open_Image.style.display='inline'; Codehighlighter1_412_511_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">  </SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> writeObject(ObjectOutputStream out) </SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000"> IOException </SPAN><SPAN id=Codehighlighter1_412_511_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_412_511_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    out.defaultWriteObject();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    out.writeObject(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> SerializableRenderedImage(image, </SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>  }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>  </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"> Deserialization method.</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">  </SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> readObject(ObjectInputStream in) </SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000"> IOException,<BR><IMG id=Codehighlighter1_640_717_Open_Image onclick="this.style.display='none'; Codehighlighter1_640_717_Open_Text.style.display='none'; Codehighlighter1_640_717_Closed_Image.style.display='inline'; Codehighlighter1_640_717_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_640_717_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_640_717_Closed_Text.style.display='none'; Codehighlighter1_640_717_Open_Image.style.display='inline'; Codehighlighter1_640_717_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>      ClassNotFoundException </SPAN><SPAN id=Codehighlighter1_640_717_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_640_717_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    in.defaultReadObject();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    image </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> (RenderedImage) in.readObject();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>  }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DT><img src ="http://www.blogjava.net/leon/aggbug/15830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2005-10-18 17:36 <a href="http://www.blogjava.net/leon/archive/2005/10/18/15830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Image] 使用Jimi输出PICT格式图像的一处BUG及解决办法</title><link>http://www.blogjava.net/leon/archive/2005/07/21/8113.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Thu, 21 Jul 2005 04:28:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2005/07/21/8113.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/8113.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2005/07/21/8113.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/8113.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/8113.html</trackback:ping><description><![CDATA[<P>使用sun提供的图像管理工具包 Jimi1_0 版本，保存PICT文件格式时输出的图像宽、高和内存中的图像源一致，可是显示出来却是纯白的。这是 Jimi1_0 版本对写Pict格式的一处 BUG，下载了新的补订类<A href="http://amug.org/~glguerin/other/PICTWriter.zip"><FONT color=#1d58d1>PICTWriter.java</FONT></A> 重新编译成PICTWriter.class加入 JimiProClasses.zip 中覆盖原有的 PICTWriter.class，遂写 PICT 格式成功。<BR><BR><BR>参考：http://amug.org/~glguerin/other/index.html#PICTWriter<BR>提醒：编译 PICTWriter.java 时需要兼容JDK以前的版本。</P><img src ="http://www.blogjava.net/leon/aggbug/8113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2005-07-21 12:28 <a href="http://www.blogjava.net/leon/archive/2005/07/21/8113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>