﻿<?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-欢迎来到小米的博客-文章分类-其它</title><link>http://www.blogjava.net/georgehill/category/1308.html</link><description>希望能和您交流Java编程的知识和见解</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 13:07:31 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 13:07:31 GMT</pubDate><ttl>60</ttl><item><title>[转载]用JavaScript做涂格子游戏</title><link>http://www.blogjava.net/georgehill/articles/7781.html</link><dc:creator>小米</dc:creator><author>小米</author><pubDate>Fri, 15 Jul 2005 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/georgehill/articles/7781.html</guid><wfw:comment>http://www.blogjava.net/georgehill/comments/7781.html</wfw:comment><comments>http://www.blogjava.net/georgehill/articles/7781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/georgehill/comments/commentRss/7781.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/georgehill/services/trackbacks/7781.html</trackback:ping><description><![CDATA[<P>
<TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top width="100%">
<TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=artitle vAlign=top colSpan=2>用JavaScript做涂格子游戏</TD></TR>
<TR class=text vAlign=top>
<TD align=left>原创：oq </TD>
<TD class=text vAlign=top align=right>2003年7月29日 </TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=arcontent colSpan=3><BR>
<STYLE type=text/css>
<!--
.tabletxt {
	padding: 7px;
}
-->
</STYLE>

<P>这是我以前玩过的一个智力游戏，那个游戏的名子叫"开窗"，实质都是一样的。学过JavaScript后我就试着做了一个，是用JavaScript和HTML及CSS做的一个.htm文档。</P>
<P>下面是这个文档的界面及其源文件的详细说明,点击这里可以下载源文件：<A href="http://www.frontfree.net/articles/pages/0000000766/table%20game.zip">点击下载源文件</A></P>
<P><A href="http://www.frontfree.net/articles/pages/0000000766/table%20game.htm" target=_blank><IMG height=377 src="http://www.frontfree.net/articles/pages/0000000766/table%20game.gif" width=487 border=0></A></P>
<P>首先在源文件的开头处我引用了一个名为game01.css的样式表：&lt;link rel="stylesheet" href="game01.css"&gt;，用过CSS的朋友应该很熟悉了。当把样式表单独写成一个文件时就用&lt;link&gt;标记连接过来。下面我分别介绍游戏中的各个功能：</P>
<P>游戏一开始会画出一个10×10的网格，它的大小是可以更改的，只要在"棋盘大小"处输入你想要的网格大小后再点击"开始游戏"就可以了。一开始画出10×10的网格是用drawBoard()函数完成的，如下：</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>function</FONT><FONT color=#000000> <FONT color=#840000>drawBoard()</FONT><BR><FONT color=#840000>{<BR></FONT><FONT color=#0000ff>　var</FONT><FONT color=#840000> str</FONT>=<FONT color=#ff00ff>"&lt;table</FONT> <FONT color=#ff00ff>align='center'</FONT> <FONT color=#ff00ff>border='5'</FONT> <FONT color=#ff00ff>cellspacing='</FONT> <FONT color=#ff00ff>0'</FONT> <FONT color=#ff00ff>cellpadding='0'</FONT> <FONT color=#ff00ff>id='gameBoard'</FONT> <FONT color=#ff00ff>bordercolor='#0000ff'</FONT> <FONT color=#ff00ff>onMouseOver='mouseOver()'</FONT> <FONT color=#ff00ff>onMouseOut='mouseOut()'</FONT> <FONT color=#ff00ff>onClick='clicktable()'&gt;"</FONT><FONT color=#840000>;</FONT><BR><FONT color=#0000ff>　for</FONT><FONT color=#840000>(</FONT><FONT color=#0000ff>var</FONT><FONT color=#840000> i=0;i&lt;size;i++)</FONT><BR><FONT color=#840000>　{</FONT><BR><FONT color=#840000>　　str+=</FONT><FONT color=#ff00ff>"&lt;tr&gt;"</FONT><FONT color=#840000>;</FONT><BR><FONT color=#0000ff>　　for</FONT>(<FONT color=#0000ff>var</FONT><FONT color=#840000> j=0;j&lt;size;j++)</FONT><BR><FONT color=#840000>　　　　str+=</FONT><FONT color=#ff00ff>"&lt;td&gt;&amp;nbsp;&lt;/td&gt;"</FONT><FONT color=#840000>;</FONT><BR><FONT color=#840000>　　str+=</FONT><FONT color=#ff00ff>"&lt;/tr&gt;"</FONT><FONT color=#840000>;</FONT> <BR>　}<BR><FONT color=#840000>　str+=</FONT><FONT color=#ff00ff>"&lt;/table&gt;"</FONT><FONT color=#840000>;</FONT><BR><FONT color=#0000ff>　return</FONT><FONT color=#840000> str;</FONT><BR>} </FONT></TD></TR></TBODY></TABLE>
<P>其中size是在&lt;script&gt;&lt;/script&gt;标记的一开始定义的全局变量，如下：</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>var</FONT> <FONT color=#840000>size=10;</FONT><BR><FONT color=#0000ff>var</FONT> <FONT color=#840000>totalMoves=0;</FONT><BR><FONT color=#0000ff>var</FONT> <FONT color=#840000>lightOn;</FONT><BR><FONT color=#0000ff>var</FONT> <FONT color=#840000>lightOff;</FONT><BR><FONT color=#0000ff>var</FONT> <FONT color=#840000>currentable;</FONT></TD></TR></TBODY></TABLE>
<P>它的初值为10，所以游戏一开始先画出一个10×10的表格。函数把一个完整的 &lt;table&gt; 赋给了变量str,最后返回str。两个for循环是根据size的大小赋给str表格的行数和列数。第一个for循环用 str+="&lt;tr&gt;；赋给str 行标记&lt;tr&gt;，每一行中用第二个for循环： </P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>for</FONT><FONT color=#990000>(<FONT color=#0000ff>var</FONT> j=0;j&lt;size;j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+=<FONT color=#ff00ff>"&lt;td&gt;&amp;nbsp;&lt;/td&gt;"</FONT>；</FONT></TD></TR></TBODY></TABLE>
<P>赋给str单元格标记&lt;td&gt;,总共要赋size个，因此循环条件为：j&lt;size; 。程序运行时在&lt;BODY&gt;的&lt;script&gt;中调用drawBoard()即:document.write(drawBoard());就画出了10×10的网格。而对网格的修改则是通过newGame()完成的：</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>function</FONT> <FONT color=#840000>newGame()<BR>{</FONT><BR><FONT color=#840000>　size</FONT>=<FONT color=#ff0000>document</FONT><FONT color=#840000>.all.boardSize.value;</FONT><BR><FONT color=#0000ff>　if<FONT color=#840000>(</FONT></FONT><FONT color=#840000>size&lt;2)<BR>　　size=2;</FONT><BR><FONT color=#0000ff>　if</FONT><FONT color=#840000>(size&gt;14)<BR>　　size=14;</FONT><BR><FONT color=#ff0000>　document</FONT><FONT color=#840000>.all.boardSize.value=size;</FONT><BR><FONT color=#ff0000>　document</FONT><FONT color=#840000>.all.gameBoard.outerHTML=drawBoard(</FONT>);<BR><FONT color=#840000>　lightOn=0;</FONT><BR><FONT color=#ff0000>　document</FONT><FONT color=#840000>.all.LightOn.innerText=lightOn</FONT>;<BR><FONT color=#840000>　lightOf</FONT>f=<FONT color=#ff0000>Math</FONT><FONT color=#840000>.pow(size,2);</FONT><BR><FONT color=#ff0000>　document</FONT><FONT color=#840000>.all.LightOff.innerText=lightOff;</FONT><BR><FONT color=#840000>　totalMoves=0;</FONT><BR><FONT color=#ff0000>　document</FONT><FONT color=#840000>.all.Move.innerText=totalMoves;</FONT><BR>} </TD></TR></TBODY></TABLE>
<P>在单击"开始游戏"时就触发了 onClick="newGame()" 事件，在newGame()函数中我们对全局变量size的值进行了修改：size=document.all.boardSize.value; 即把玩家在棋盘大小处输入的值赋给size,再调用drawBoard()重新画一遍网格就实现了改变网格的大小。其中 </P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0 height=16><FONT color=#0000ff>if</FONT><FONT color=#990000>(size&lt;2) size=2；<BR><FONT color=#0000ff>if</FONT>(size&gt;14) size=14;</FONT></TD></TR></TBODY></TABLE>
<P>是为了保证网格的改变在页面允许的范围内，即把size限制在&nbsp; 2&lt;=size&lt;=14 。过大或过小的值都会被 document.all.boardSize.value=size；语句把2或14写到"棋盘大小"处。newGame()中语句： document.all.gameBoard.outerHTML=drawBoard() 是用THML语言设置对象内容。newGame()中下面的内容:</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#990000>lightOn=0;<BR><FONT color=#ff0000>document</FONT>.all.LightOn.innerText=lightOn;<BR>&nbsp;lightOff=<FONT color=#ff0000>Math</FONT>.pow(size,2);<BR><FONT color=#ff0000>document</FONT>.all.LightOff.innerText=lightOff;<BR>totalMoves=0;<BR><FONT color=#ff0000>&nbsp;document</FONT>.all.Move.innerText=totalMoves;</FONT></TD></TR></TBODY></TABLE>
<P>是对记寻游戏状态的变量赋初值，就是游戏板左边的那三个记录灯亮个数，灯灭个数，以及移动总数的变量。</P>
<P>下面我们再来看在鼠标经过时如何使网格变色，这就是用了两个事件:onMouseOver和onMouseOut，都定义在了drawBoard()的那个 &lt;table&gt; 中。当鼠标经过时调用mouseOver():</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>function</FONT> <FONT color=#840000>mouseOver()</FONT><BR><FONT color=#840000>{</FONT><BR><FONT color=#840000>　currentable=event.srcElement;</FONT><BR><FONT color=#0000ff>　if</FONT><FONT color=#840000>(currentable.tagName==</FONT><FONT color=#ff00ff>"TD"</FONT><FONT color=#840000>)</FONT><BR><FONT color=#840000>　　{<BR>　　　currentable._background=currentable.style.backgroundColor;<BR>　　　currentable.style.backgroundColor=</FONT><FONT color=#ff00ff>"#999999"</FONT>;<BR><FONT color=#840000>　　} <BR>} </FONT></TD></TR></TBODY></TABLE>
<P>其中currentable表示当前发生事件的对象，用event.srcElement获得。currentable.tagName表示当前发生事件对象的标识符名。于是鼠标经过时 &lt;table&gt; 时，currentable得到当前发生事件的 &lt;td&gt; 使得它的_background变为当前的backgroundColor即: currentable._background=currentable.style.backgroundColor;&nbsp; 把当前的backgroundColor变为"#999999"即: currentable.style.backgroundColor="#999999"; 。看懂了mouseOver()再看mouseOut()就不难了。以下是mouseOut():</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>function</FONT> <FONT color=#840000>mouseOut()<BR>{　</FONT><BR><FONT color=#0000ff>　if</FONT><FONT color=#840000>(currentable.tagName==</FONT><FONT color=#ff00ff>"TD"</FONT><FONT color=#840000>)</FONT><BR><FONT color=#840000>　　currentable.style.backgroundColor=currentable._background;<BR>}</FONT></TD></TR></TBODY></TABLE>
<P>很好理解吧，我在这里就不多废话了。有了mouseOver()和mouseOut()就可以实现当鼠标经过每个单元格时使其改变颜色，而当鼠标移出后又变回原来的颜色。</P>
<P>源文件中最重要的函数要属clicktable()了,它的作用是当鼠标点下时使得当前对象和上下左右的方格都变色，而且要更改灯亮个数，灯灭个数，以及移动总数的值，还要判断游戏是否结束等等很多事情。同onMouseOver和onMouseOut事件一样，在drawBoard()的 &lt;table&gt; 中同样定义了onClick事件。下面是clicktable():</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>function</FONT> <FONT color=#840000>clicktable()<BR>{<BR>　totalMoves++;</FONT><BR><FONT color=#ff0000>　document</FONT><FONT color=#840000>.all.Move.innerText=totalMoves;</FONT><BR><FONT color=#0000ff>　if</FONT><FONT color=#840000>(currentable.tagName==</FONT><FONT color=#ff00ff>"TD"</FONT><FONT color=#840000>)</FONT><BR><FONT color=#840000>　{<BR>　　setColor(currentable);</FONT><BR><FONT color=#0000ff>　　var</FONT><FONT color=#840000> cell=currentable.cellIndex;</FONT><BR><FONT color=#0000ff>　　var</FONT><FONT color=#840000> row=currentable.parentElement.rowIndex;</FONT><BR><FONT color=#0000ff>　　if</FONT><FONT color=#840000>(row&gt;0)<BR>　　　setColor(gameBoard.rows[row-1].cells[cell]);</FONT><BR><FONT color=#0000ff>　　if</FONT><FONT color=#840000>(row&lt;size-1) <BR>　　　setColor(gameBoard.rows[row+1].cells[cell]);</FONT><BR><FONT color=#0000ff>　　if</FONT><FONT color=#840000>(cell&gt;0)<BR>　　　setColor(gameBoard.rows[row].cells[cell-1]);</FONT><BR><FONT color=#0000ff>　　if</FONT><FONT color=#840000>(cell&lt;size-1)<BR>　　　setColor(gameBoard.rows[row].cells[cell+1]);<BR>　}<BR>　var over=light();</FONT><BR><FONT color=#0000ff>　if</FONT><FONT color=#840000>(!over)</FONT><BR><FONT color=#ff0000>　　document</FONT><FONT color=#840000>.all.LightOff.innerText=</FONT><FONT color=#ff00ff>"You Win!"</FONT><FONT color=#840000>;</FONT><BR><FONT color=#840000>}</FONT></TD></TR></TBODY></TABLE>
<P>totalMoves就是记录总移动次数的那个变量，totalMoves++就很明白了吧，每当鼠标在某个格子上单击时就把totalMoves加1，并把totalMoves改变后的值写在移动总数的位置：document.all.Move.innerText=totalMoves; 其中innerText用来设置或得到该对象起始标记到结束标记之间的内容。往下的if语句与另一个函数setColor(current)有关，setColor(current)通过参数current得到当前对象，然后将当前对象的颜色改为黄色(灯亮)。这样通过</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#990000>cell=<FONT color=#0000ff>currentable</FONT>.cellIndex;<BR>row=<FONT color=#0000ff>currentable</FONT>.parentElement.rowIndex;</FONT></TD></TR></TBODY></TABLE>
<P>取得当前对象所在表格的行、列，从而gameBoard.rows[row-1].cells[cell]就可以访问到与该对象在同列但比它靠前一行的那个对象，也用 setColor(gameBoard.rows[row-1].cells[cell] 把它的颜色改变，同理在该对象右、下、左的对象也都可以访问到，使它们的颜色都得以改变。下面是setColor():</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>function</FONT> <FONT color=#840000>setColor(current)<BR>{</FONT><BR><FONT color=#0000ff>　if</FONT><FONT color=#840000>(current._background==</FONT><FONT color=#ff00ff>""</FONT><FONT color=#840000>||current._background==</FONT><FONT color=#0000ff>null</FONT><FONT color=#840000>||current._background==</FONT><FONT color=#ff00ff>"#ccccff"</FONT>)<BR><FONT color=#840000>　{<BR>　　current.style.backgroundColo</FONT>r=<FONT color=#ff00ff>"yellow"</FONT>;<BR><FONT color=#840000>　　current._background=</FONT><FONT color=#ff00ff>"yellow"</FONT>;<BR><FONT color=#840000>　}</FONT> <BR><FONT color=#0000ff>　else if</FONT><FONT color=#840000>(current._background==</FONT><FONT color=#ff00ff>"yellow"</FONT><FONT color=#840000>)</FONT><BR><FONT color=#840000>　{<BR>　　current.style.backgroundColo</FONT>r=<FONT color=#ff00ff>"#ccccff"</FONT>;<BR><FONT color=#840000>　　current._background=</FONT><FONT color=#ff00ff>"#ccccff"</FONT>;<BR><FONT color=#840000>　} <BR>} </FONT></TD></TR></TBODY></TABLE>
<P>代码不难，我就不细说了。clicktable()中最后的那个light()是判断游戏是否结束的函数，因为函数中要数一下灯亮和灯灭的个数，所以我就叫它light()了，如下：</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>function</FONT> <FONT color=#840000>light()<BR>{<BR>　lightOn=0;<BR>　lightOff=0;</FONT><BR><FONT color=#0000ff>　for</FONT><FONT color=#840000>(var i=0;i&lt;size;i++)</FONT><BR><FONT color=#0000ff>　for</FONT><FONT color=#840000>(var j=0;j&lt;size;j++)</FONT><BR><FONT color=#0000ff>　if</FONT><FONT color=#840000>(gameBoard.rows[i].cells[j]._background</FONT>==<FONT color=#ff00ff>"yellow"</FONT><FONT color=#840000>)</FONT><BR><FONT color=#840000>　　lightOn++;</FONT><BR><FONT color=#0000ff>　else</FONT> <FONT color=#840000>lightOff++;</FONT><BR><FONT color=#ff0000>　document</FONT><FONT color=#840000>.all.LightOn.innerText=lightOn;</FONT><BR><FONT color=#ff0000>　document</FONT><FONT color=#840000>.all.LightOff.innerText=lightOff;</FONT><BR><FONT color=#0000ff>　return </FONT><FONT color=#840000>lightOff;<BR>} </FONT></TD></TR></TBODY></TABLE>
<P>lightOn和lightOff还是在一开始定义的全局变量，因为鼠标每次单击后都要检查一遍，所以要先给它们赋0。接下来就是用一个双重循环访问每一个 &lt;td&gt; 对象的 _background 如果是yellow则lightOn++，如果不是则lightOff++，最后不要忘记把lightOn和lightOff的值赋到LightOn和LightOff的innerText里。然后将lightOff反回并在clicktable()中判断是否结束，如果lightOff==0就结束并在"灯灭"的位置出现"You Win"。</P>
<P>最后还有一个规则说明，是一个超链接，点击后调用newWin():</P>
<TABLE class=code cellSpacing=4 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tabletxt bgColor=#e0e0e0><FONT color=#0000ff>function</FONT><FONT color=#840000> newWin()<BR>{</FONT><BR><FONT color=#0000ff>　var</FONT> <FONT color=#840000>newin=open(</FONT><FONT color=#ff00ff>"","","height=170,width=250,resizable=0"</FONT><FONT color=#840000>);</FONT><BR><FONT color=#840000>　newin.</FONT><FONT color=#ff0000>document</FONT><FONT color=#840000>.write</FONT>(<FONT color=#ff00ff>"&amp;nbsp;&amp;nbsp;在'棋盘大小'处输入数字 后按'开始游戏'键即可得到你想要的棋盘大小。棋盘中黄色表示灯亮， 白色表示灯灭。单击鼠标后当前方格和上下左右的方格都会变色，把所有的方格都' 点亮'后你就胜利了！"</FONT><FONT color=#840000>);<BR>} </FONT></TD></TR></TBODY></TABLE>
<P>newWin()新打开一个窗口，并在新窗口中写入游戏规则。</P>
<P>以上就是对本游戏的全部讲解，所有的功能我都调试通过，文章中若有疏漏之处还请高手指点。</P></TD></TR></TBODY></TABLE></P><img src ="http://www.blogjava.net/georgehill/aggbug/7781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/georgehill/" target="_blank">小米</a> 2005-07-15 16:46 <a href="http://www.blogjava.net/georgehill/articles/7781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图像文件后缀一览表</title><link>http://www.blogjava.net/georgehill/articles/6554.html</link><dc:creator>小米</dc:creator><author>小米</author><pubDate>Wed, 22 Jun 2005 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/georgehill/articles/6554.html</guid><wfw:comment>http://www.blogjava.net/georgehill/comments/6554.html</wfw:comment><comments>http://www.blogjava.net/georgehill/articles/6554.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/georgehill/comments/commentRss/6554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/georgehill/services/trackbacks/6554.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width=550 border=0>
<TBODY>
<TR>
<TD vAlign=top width="100%">
<DIV class=xTitle align=center>6.5 图像文件后缀一览表</DIV><FONT lang=ZH-CN face=宋体>
<P>文件格式是存储文本、图形或者图像数据的一种数据结构。在文字处理中，存储文本文件要使用文件格式。例如，使用微软公司的Word处理器编写的文件，可根据不同的应用环境用不同的格式存储。如果使用多信息文本格式(Rich Text Format，RTF)存储，这个文件就可在其他的平台(如Mac机)或者使用其他的字处理器进行处理。同样，存储图像也需要有存储格式，从20世纪70年代图像开始进入计算机以来，开发了许许多多的图像文件存储格式，而且互相不兼容，需要使用针对特定格式的处理软件。现在都意识到，不兼容的格式给用户造成很多的不便，因此有些格式也逐渐被淘汰。</P>
<P>在计算机中，有两种类型的图：矢量图(vector graphics)和位映象图(bitmapped graphics)。矢量图是用数学方法描述的一系列点、线、弧和其他几何形状，如图6-17(a)所示。因此存放这种图使用的格式称为矢量图格式，存储的数据主要是绘制图形的数学描述；位映象图(bitmapped graphics)也称光栅图(raster graphics)，这种图就像电视图像一样，由象点组成的，如图6-17(b)，因此存放这种图使用的格式称为位映象图格式，经常简称为位图格式，存储的数据是描述像素的数值。</P>
<P align=center><IMG height=300 src="http://mti.xidian.edu.cn/multimedia/multi/img/Imgc6265.gif" width=441></P></FONT><FONT lang=ZH-CN face=宋体 color=#000080>
<P align=center>图6-17 矢量图与位映象图</P></FONT><FONT lang=ZH-CN face=宋体>
<P>除了本章介绍的4种常用格式之外，在我们的工作中还会遇到其他图像格式。为方便查阅，现将部分图形与图像文件的后缀和名称列在表6-11@和表6-12@中。如果编写程序需要很专业的图像格式资源，包括一些源程序(source code)，可以访问站点：http://www.wotsit.org/，你可饱览多媒体世界中的各种媒体的存储格式。</P></FONT><FONT lang=ZH-CN face=宋体 color=#000080>
<P>表6-11@ 位映象图格式/光栅图光栅(bitmapped formats / raster graphics)</P></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=1 cellPadding=1 width=560 border=1>
<TBODY>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P align=center>后缀</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P align=center>文件名称</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P align=center>后缀</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P align=center>文件名称</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>AG4</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Access G4 document imaging</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>JFF</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>JPEG (JFIF)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>ATT</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>AT&amp;T Group IV</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>JPG</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>JPEG</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>BMP</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Windows &amp; OS/2</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>KFX</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Kofax Group IV</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CAL</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>CALS Group IV</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>MAC</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>MacPaint</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CIT</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Intergraph scanned images</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>MIL</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Same as GP4 extension</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CLP</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Windows Clipboard</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>MSP</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Microsoft Paint</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CMP</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Photomatrix G3/G4 scanner format</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>NIF</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Navy Image File</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CMP</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>LEAD Technologies</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PBM</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Portable bitmap</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CPR</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Knowledge Access</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PCD</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>PhotoCD</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CT</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Scitex Continuous Tone</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PCX</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>PC Paintbrush</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CUT</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Dr. Halo</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PIX</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Inset Systems (HiJaak)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>DBX</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>DATABEAM</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PNG</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Portable Network Graphics</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>DX</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Autotrol document imaging</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PSD</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Photoshop native format</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>ED6</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>EDMICS (U.S. DOD)</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>RAS</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Sun</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>EPS</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Encapsulated PostScript</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>RGB</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>SGI</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>FAX</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Fax</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>RIA</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Alpharel Group IV document imaging</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>FMV</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>FrameMaker</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>RLC</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Image Systems</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>GED</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Arts &amp; Letters</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>RLE</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Various RLE-compressed formats</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>GDF</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>IBM GDDM format</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>RNL</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>GTX Runlength</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>GIF</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>CompuServe</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>SBP</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>IBM StoryBoard</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>GP4</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>CALS Group IV - ITU Group IV</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>SGI</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Silicon Graphics RGB</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>GX1</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Show Partner</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>SUN</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Sun</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>GX2</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Show Partner</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>TGA</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>Targa</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>ICA</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>IBM IOCA (see MO:DCA)</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>TIF</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>TIFF</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>ICO</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Windows icon</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>WPG</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>WordPerfect image</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>IFF</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Amiga ILBM</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>XBM</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>X Window bitmap</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>IGF</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Inset Systems (HiJaak)</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>XPM</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>X Window pixelmap</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>IMG</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>GEM Paint</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>XWD</FONT></P></TD>
<TD vAlign=top width="45%"><FONT lang=ZH-CN face=宋体>
<P>X Window dump</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体 color=#000080>
<P>表6-12@ 矢量图格式(vector graphics formats)</P></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=1 cellPadding=1 width=574 border=1>
<TBODY>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P align=center>后缀</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P align=center>文件名称</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P align=center>后缀</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P align=center>文件名称</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>3DS</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>3D Studio</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>GEM</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>GEM proprietary</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>906</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Calcomp plotter</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>G4</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>GTX RasterCAD - scanned images<BR>into vectors for AutoCAD</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>AI</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Adobe Illustrator</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>IGF</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>Inset Systems (HiJaak)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CAL</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>CALS subset of CGM</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>IGS</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>IGES</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CDR</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>CorelDRAW</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>MCS</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>MathCAD</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CGM</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Computer Graphics Metafile</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>MET</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>OS/2 metafile</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CH3</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Harvard Graphics chart</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>MRK</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>Informative Graphics markup file</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CLP</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Windows clipboard</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>P10</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>Tektronix plotter (PLOT10)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>CMX</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Corel Metafile Exchange</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PCL</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>HP LaserJet</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>DG</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Autotrol</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PCT</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>Macintosh PICT drawings</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>DGN</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Intergraph drawing format</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PDW</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>HiJaak</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>DRW</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Micrografx Designer 2.x, 3.x</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PGL</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>HP plotter</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>DS4</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Micrografx Designer 4.x</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PIC</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>Variety of picture formats</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>DSF</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Micrografx Designer 6.x</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PIX</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>Inset Systems (HiJaak)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>DXF</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>AutoCAD</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PLT</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>HPGL Plot File (HPGL2 has raster format)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>DWG</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>AutoCAD</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>PS</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>PostScript Level 2</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>EMF</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Enhanced metafile</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>RLC</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>Image Systems "CAD Overlay ESP"<BR>vector files overlaid onto raster images</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>EPS</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Encapsulated PostScript</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>SSK</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>SmartSketch</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>ESI</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Esri plot file (GIS mapping)</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>WMF</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>Windows Metafile</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>FMV</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>FrameMaker</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>WPG</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>WordPerfect graphics</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>GCA</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>IBM GOCA</FONT></P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>WRL</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>VRML</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>后缀</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>文件名称</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P><BR></FONT><FONT face="宋体, MS Song">&nbsp;</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P></FONT>&nbsp;</P></TD></TR></TBODY></TABLE></CENTER>
<P></P></TD></TR>
<TR>
<TD align=middle width="100%"><BR></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/georgehill/aggbug/6554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/georgehill/" target="_blank">小米</a> 2005-06-22 16:55 <a href="http://www.blogjava.net/georgehill/articles/6554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PNG格式</title><link>http://www.blogjava.net/georgehill/articles/6552.html</link><dc:creator>小米</dc:creator><author>小米</author><pubDate>Wed, 22 Jun 2005 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/georgehill/articles/6552.html</guid><wfw:comment>http://www.blogjava.net/georgehill/comments/6552.html</wfw:comment><comments>http://www.blogjava.net/georgehill/articles/6552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/georgehill/comments/commentRss/6552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/georgehill/services/trackbacks/6552.html</trackback:ping><description><![CDATA[<DIV class=xTitle align=center>6.4 PNG格式</DIV><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P>6.4.1 简介</P>
<DIR></DIR></B></FONT><FONT lang=ZH-CN face=宋体>
<P>PNG是20世纪90年代中期开始开发的图像文件存储格式，其目的是企图替代GIF和TIFF文件格式，同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format，PNG)名称来源于非官方的“PNG's Not GIF”，是一种位图文件(bitmap file)存储格式，读成“ping”。PNG用来存储灰度图像时，灰度图像的深度可多到16位，存储彩色图像时，彩色图像的深度可多到48位，并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。</P>
<P>PNG文件格式保留GIF文件格式的下列特性：</P>
<OL>
<LI>使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。 
<LI>流式读/写性能(streamability)：图像文件格式允许连续读出和写入图像数据，这个特性很适合于在通信过程中生成和显示图像。 
<LI>逐次逼近显示(progressive display)：这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像，把整个轮廓显示出来之后逐步显示图像的细节，也就是先用低分辨率显示图像，然后逐步提高它的分辨率。 
<LI>透明性(transparency)：这个性能可使图像中某些部分不显示出来，用来创建一些有特色的图像。 
<LI>辅助信息(ancillary information)：这个特性可用来在图像文件中存储一些文本注释信息。 
<LI>独立于计算机软硬件环境。 
<LI>使用无损压缩。</LI></OL>
<P>PNG文件格式中要增加下列GIF文件格式所没有的特性：</P>
<OL>
<LI>每个像素为48位的真彩色图像。 
<LI>每个像素为16位的灰度图像。 
<LI>可为灰度图和真彩色图添加α通道。 
<LI>添加图像的γ信息。 
<LI>使用循环冗余码(<B>c</B>yclic <B>r</B>edundancy <B>c</B>ode，CRC)检测损害的文件。 
<LI>加快图像显示的逐次逼近显示方式。 
<LI>标准的读/写工具包。 
<LI>可在一个文件中存储多幅图像。</LI></OL>
<DIR></FONT><B><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P>6.4.2 文件结构</P></DIR></B></FONT><FONT lang=ZH-CN face=宋体>
<P>PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。</P>
<P>PNG定义了两种类型的数据块，一种是称为关键数据块(critical chunk)，这是标准的数据块，另一种叫做辅助数据块(ancillary chunks)，这是可选的数据块。关键数据块定义了4个标准数据块，每个PNG文件都必须包含它们，PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码，但规范提倡支持可选数据块。</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>(1) PNG文件署名域</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是：</P></FONT>
<P align=center>
<CENTER>
<TABLE cellSpacing=0 cellPadding=1 width=278 border=0>
<TBODY>
<TR>
<TD vAlign=top width="29%"><FONT lang=ZH-CN face=宋体>
<P>十进制数</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>137</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>80</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>78</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>71</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>13</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>10</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>26</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>10</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="29%"><FONT lang=ZH-CN face=宋体>
<P>十六进制数</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>89</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>50</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>4e</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>47</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>0d</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>0a</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>1a</FONT></P></TD>
<TD vAlign=top width="9%"><FONT lang=ZH-CN face=宋体>
<P>0a</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>　</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>(2) 数据块的结构</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>每个数据块都由表6-07所示的的4个域组成。</P>
<DIR><B>
<P align=center>表6-07 PNG文件数据块的结构</P></DIR></B></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 cellPadding=1 width=557 border=1>
<TBODY>
<TR>
<TD vAlign=top width="37%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>名称</B></FONT></P></TD>
<TD vAlign=top width="12%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>字节数</B></FONT></P></TD>
<TD vAlign=top width="51%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>说明</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="37%"><FONT lang=ZH-CN face=宋体>
<P>Length(长度)</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P>4字节</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>指定数据块中数据域的长度，其长度不超过<BR>(2<SUP>31</SUP>－1)字节</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="37%"><FONT lang=ZH-CN face=宋体>
<P>Chunk Type Code(数据块类型码)</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P>4字节</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>数据块类型码由ASCII字母(A-Z和a-z)组成</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="37%"><FONT lang=ZH-CN face=宋体>
<P>Chunk Data(数据块数据)</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P>可变长度</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>存储按照Chunk Type Code指定的数据</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="37%"><FONT lang=ZH-CN face=宋体>
<P>CRC(循环冗余检测)</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P>4字节</FONT></P></TD>
<TD vAlign=top width="51%"><FONT lang=ZH-CN face=宋体>
<P>存储用来检测是否有错误的循环冗余码</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>在表6-07中，CRC(<B>c</B>yclic <B>r</B>edundancy <B>c</B>heck)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC具体算法定义在ISO 3309和ITU-T V.42中，其值按下面的CRC码生成多项式进行计算：</P>
<P>x<SUP>32</SUP>+x<SUP>26</SUP>+x<SUP>23</SUP>+x<SUP>22</SUP>+x<SUP>16</SUP>+x<SUP>12</SUP>+x<SUP>11</SUP>+x<SUP>10</SUP>+x<SUP>8</SUP>+x<SUP>7</SUP>+x<SUP>5</SUP>+x<SUP>4</SUP>+x<SUP>2</SUP>+x+1</P>
<DIR></FONT><B><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P>6.4.3 数据块结构</P></DIR></FONT><FONT lang=ZH-CN face=宋体 color=#800080>
<P>1. 关键数据块</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>关键数据块中的4个标准数据块是：</P>
<P>(1) 文件头数据块IHDR(header chunk)：它包含有PNG文件中存储的图像数据的基本信息，并要作为第一个数据块出现在PNG数据流中，而且一个PNG数据流中只能有一个文件头数据块。</P>
<P>文件头数据块由13字节组成，它的格式如表6-08所示。</P>
<DIR><B>
<P align=center>表6-08 PNG文件头键数据块的结构</P></DIR></B></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 width=460 border=1>
<TBODY>
<TR>
<TD vAlign=top width="27%"><FONT lang=ZH-CN face=宋体>
<P align=center>域的名称</FONT></P></TD>
<TD vAlign=top width="17%"><FONT lang=ZH-CN face=宋体>
<P align=center>字节数</FONT></P></TD>
<TD vAlign=top width="56%"><FONT lang=ZH-CN face=宋体>
<P align=center>说明</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="27%"><FONT lang=ZH-CN face=宋体>
<P>Width</FONT></P></TD>
<TD vAlign=top width="17%"><FONT lang=ZH-CN face=宋体>
<P>4 bytes</FONT></P></TD>
<TD vAlign=top width="56%"><FONT lang=ZH-CN face=宋体>
<P>图像宽度，以像素为单位</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="27%"><FONT lang=ZH-CN face=宋体>
<P>Height</FONT></P></TD>
<TD vAlign=top width="17%"><FONT lang=ZH-CN face=宋体>
<P>4 bytes</FONT></P></TD>
<TD vAlign=top width="56%"><FONT lang=ZH-CN face=宋体>
<P>图像高度，以像素为单位</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="27%"><FONT lang=ZH-CN face=宋体>
<P>Bit depth</FONT></P></TD>
<TD vAlign=top width="17%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="56%"><FONT lang=ZH-CN face=宋体>
<P>图像深度：<BR>索引彩色图像：1，2，4或8<BR>灰度图像：1，2，4，8或16<BR>真彩色图像：8或16</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="27%"><FONT lang=ZH-CN face=宋体>
<P>ColorType</FONT></P></TD>
<TD vAlign=top width="17%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="56%"><FONT lang=ZH-CN face=宋体>
<P>颜色类型：<BR>0：灰度图像, 1，2，4，8或16<BR>2：真彩色图像，8或16<BR>3：索引彩色图像，1，2，4或8</P>
<P>4：带α通道数据的灰度图像，8或16<BR>6：带α通道数据的真彩色图像，8或16</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="27%"><FONT lang=ZH-CN face=宋体>
<P>Compression method</FONT></P></TD>
<TD vAlign=top width="17%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="56%"><FONT lang=ZH-CN face=宋体>
<P>压缩方法(LZ77派生算法)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="27%"><FONT lang=ZH-CN face=宋体>
<P>Filter method</FONT></P></TD>
<TD vAlign=top width="17%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="56%"><FONT lang=ZH-CN face=宋体>
<P>滤波器方法</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="27%"><FONT lang=ZH-CN face=宋体>
<P>Interlace method</FONT></P></TD>
<TD vAlign=top width="17%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="56%"><FONT lang=ZH-CN face=宋体>
<P>隔行扫描方法：</P>
<P>0：非隔行扫描</P>
<P>1： Adam7(由Adam M. Costello开发的7 <BR>遍隔行扫描方法)</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>(2) 调色板数据块PLTE(palette chunk)：它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据，它仅与索引彩色图像有关，而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块，目的是便于非真彩色显示程序用它来量化图像数据，从而显示该图像。调色板数据块结构如表6-09所示。</P>
<DIR><B>
<P align=center>表6-09 调色板数据块结构</P></DIR></B></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 cellPadding=1 width=234 border=1>
<TBODY>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P align=center>域的名称</FONT></P></TD>
<TD vAlign=top width="22%"><FONT lang=ZH-CN face=宋体>
<P align=center>字节数</FONT></P></TD>
<TD vAlign=top width="50%"><FONT lang=ZH-CN face=宋体>
<P align=center>说明</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>Red</FONT></P></TD>
<TD vAlign=top width="22%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="50%"><FONT lang=ZH-CN face=宋体>
<P>0 = 黑，255 = 红</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>Green</FONT></P></TD>
<TD vAlign=top width="22%">"&gt; <FONT lang=ZH-CN face=宋体>
<P>0 = 黑，255 = 绿</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>Blue</FONT></P></TD>
<TD vAlign=top width="22%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="50%"><FONT lang=ZH-CN face=宋体>
<P>0 = 黑，255 = 蓝</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>调色板实际是一个彩色索引查找表，它的表项数目可以是1～256中的一个数，每个表项有3字节，因此调色板数据块所包含的最大字节数为768。</P>
<P>(3) 图像数据块IDAT(image data chunk)：它存储实际的数据，在数据流中可包含多个连续顺序的图像数据块。</P>
<P>(4) 图像结束数据IEND(image trailer chunk)：它用来标记PNG文件或者数据流已经结束，并且必须要放在文件的尾部。</P>
<P>除了表示数据块开始的IHDR必须放在最前面， 表示PNG文件结束的IEND数据块放在最后面之外，其他数据块的存放顺序没有限制。</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>2. 辅助数据块</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>PNG文件格式规范制定的10个辅助数据块是：</P>
<P>(1) 背景颜色数据块bKGD(background color)。</P>
<P>(2) 基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R＝G＝B＝最大值时在显示器上产生的白色度。</P>
<P>(3) 图像γ数据块gAMA(image gamma)。</P>
<P>(4) 图像直方图数据块hIST(image histogram)。</P>
<P>(5) 物理像素尺寸数据块pHYs(physical pixel dimensions)。</P>
<P>(6) 样本有效位数据块sBIT(significant bits)。</P>
<P>(7) 文本信息数据块tEXt(textual data)。</P>
<P>(8) 图像最后修改时间数据块tIME (image last-modification time)。</P>
<P>(9) 图像透明数据块tRNS (transparency)。</P>
<P>(10) 压缩文本数据块zTXt (compressed textual data)。</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>3. 数据块摘要</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>关键数据块、辅助数据块和专用公共数据块(special-purpose public chunks)综合在表6-10中。</P>
<DIR><B>
<P align=center>表6-10 PNG文件格式中的数据块</P></DIR></B></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 width=532 border=1>
<TBODY>
<TR>
<TD vAlign=top width="14%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>数据块符号</B></FONT></P></TD>
<TD vAlign=top width="30%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>数据块名称</B></FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P align=center>多数据块</B></FONT></P></TD>
<TD vAlign=top width="10%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>可选否</B></FONT></P></TD>
<TD vAlign=top width="32%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>位置限制</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>IHDR</FONT></P></TD>
<TD vAlign=top width="30%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>文件头数据块</FONT></P></TD>
<TD vAlign=top width="13%" bgColor=#ffffff colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="32%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>第一块</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>cHRM</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>基色和白色点数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>在PLTE和IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>gAMA</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>图像γ数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>在PLTE和IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>sBIT</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>样本有效位数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>在PLTE和IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>PLTE</FONT></P></TD>
<TD vAlign=top width="30%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>调色板数据块</FONT></P></TD>
<TD vAlign=top width="13%" bgColor=#ffffff colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>在IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>bKGD</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>背景颜色数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>在PLTE之后IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>hIST</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>图像直方图数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>在PLTE之后IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>tRNS</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>图像透明数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>在PLTE之后IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>oFFs</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>(专用公共数据块)</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>在IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>pHYs</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>物理像素尺寸数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>在IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>sCAL</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>(专用公共数据块)</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>在IDAT之前</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>IDAT</FONT></P></TD>
<TD vAlign=top width="30%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>图像数据块</FONT></P></TD>
<TD vAlign=top width="13%" bgColor=#ffffff colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="10%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="32%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>与其他IDAT连续</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>tIME</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>图像最后修改时间数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>无限制</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>tEXt</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>文本信息数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>无限制</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>zTXt</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>压缩文本数据块</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>无限制</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>fRAc</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>(专用公共数据块)</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>无限制</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>gIFg</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>(专用公共数据块)</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>无限制</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>gIFt</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>(专用公共数据块)</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>无限制</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%"><FONT lang=ZH-CN face=宋体>
<P>gIFx</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>(专用公共数据块)</FONT></P></TD>
<TD vAlign=top width="13%" colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>是</FONT></P></TD>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>无限制</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="14%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>IEND</FONT></P></TD>
<TD vAlign=top width="30%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>图像结束数据</FONT></P></TD>
<TD vAlign=top width="13%" bgColor=#ffffff colSpan=3><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="10%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P align=center>否</FONT></P></TD>
<TD vAlign=top width="32%" bgColor=#ffffff><FONT lang=ZH-CN face=宋体>
<P>最后一个数据块</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>tEXt</FONT><FONT lang=ZH-CN face=宋体 size=2>和</FONT><FONT lang=ZH-CN face=宋体>zTXt</FONT><FONT lang=ZH-CN face=宋体 size=2>数据块中的</FONT><FONT lang=ZH-CN face=宋体>标准关键字：</P></FONT>
<P align=left>
<TABLE cellSpacing=0 cellPadding=1 width=279 border=0>
<TBODY>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>Title</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>图像名称或者标题</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>Author</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>图像作者名</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>Description</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>图像说明</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>Copyright</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>版权声明</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>CreationTime</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>原图创作时间</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>Software</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>创作图像使用的软件</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>Disclaimer</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>弃权</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>Warning</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>图像内容警告</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>Source</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>创作图像使用的设备</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="41%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>Comment</P></DIR></FONT></TD>
<TD vAlign=top width="59%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>各种注释</P></DIR></FONT></TD></TR></TBODY></TABLE></P><img src ="http://www.blogjava.net/georgehill/aggbug/6552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/georgehill/" target="_blank">小米</a> 2005-06-22 16:54 <a href="http://www.blogjava.net/georgehill/articles/6552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JPEG格式</title><link>http://www.blogjava.net/georgehill/articles/6551.html</link><dc:creator>小米</dc:creator><author>小米</author><pubDate>Wed, 22 Jun 2005 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/georgehill/articles/6551.html</guid><wfw:comment>http://www.blogjava.net/georgehill/comments/6551.html</wfw:comment><comments>http://www.blogjava.net/georgehill/articles/6551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/georgehill/comments/commentRss/6551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/georgehill/services/trackbacks/6551.html</trackback:ping><description><![CDATA[<DIV class=xTitle align=center>6.3 JPEG格式</DIV><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P>6.3.1 简介</P>
<DIR></DIR></B></FONT><FONT lang=ZH-CN face=宋体>
<P>微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分。正序存放就是高字节存放在前低字节在后，而逆序存放就是低字节在前高字节在后。例如，十六进制数为A02B，正序存放就是A02B，逆序存放就是2BA0。摩托罗拉(Motorola)公司的微处理器使用正序存放，而英特尔(Intel)公司的微处理器使用逆序。JPEG文件中的字节是按照正序排列的。</P>
<P>
<HR align=right>
<A name=Scope></A>JPEG委员会在制定JPEG标准时，定义了许多标记(marker)用来区分和识别图像数据及其相关信息，但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。直到1998年12月从分析网上具体的JPG图像来看，使用比较广泛的还是<SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: red; FONT-FAMILY: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt"><FONT color=#000000>JPEG文件交换格式(JPEG File </FONT><FONT color=#004000>Interchange Format，JFIF)</FONT></SPAN></FONT><FONT lang=ZH-CN face=宋体><FONT color=#004000>版</FONT>本号为1.02。这是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外还有TIFF JPEG等格式，但由于这种格式比较复杂，因此大多数应用程序都支持JFIF文件交换格式。 
<P></P>
<P><A name=Features><A name=Conversion></A></A>JPEG文件使用的颜色空间是CCIR 601推荐标准进行的彩色空间(参看第7章)。在这个彩色空间中，每个分量、每个像素的电平规定为255级，用8位代码表示。从RGB转换成YCbCr空间时，使用下面的精确的转换关系：</P>
<P>　　　　　　 Y = 256 * E'y</P>
<P>　　　　　 Cb = 256 * [E'<SUB>Cb</SUB>] + 128</P>
<P>　　　　　 Cr = 256 * [E'<SUB>Cr</SUB>] + 128<BR>其中亮度电平E'<SUB>y</SUB>和色差电平E'<SUB>Cb</SUB>和E'<SUB>Cb</SUB>分别是CCIR 601定义的参数。由于E'<SUB>y</SUB>的范围是0～1，E'<SUB>Cb</SUB>和E'<SUB>Cb</SUB>的范围是-0.5～+0.5，因此Y, Cb和Cr的最大值必须要箝到255。于是RGB和YCbCr之间的转换关系需要按照下面的方法计算。</P>
<P>(1) 从RGB转换成YCbCr</P>
<P>YCbCr(256级)分量可直接从用8位表示的RGB分量计算得到：</P>
<P>　 　　　　 Y =　　 0.299 R + 0.587　G　 + 0.114 B</P>
<P>　　 　 Cb = - 0.1687R - 0.3313G　 + 0.5　　　B + 128</P>
<P>　　　 Cr = 0.5 R - 0.4187G - 0.0813 B + 128</P>
<P>需要注意的是不是所有图像文件格式都按照R0，G0，B0，…… Rn，Gn，Bn的次序存储样本数据，因此在RGB文件转换成JFIF文件时需要首先验证RGB的次序。</P>
<P>(2) 从YCbCr转换成RGB </P>
<P>RGB分量可直接从YCbCr(256级)分量计算得到：</P>
<P>　　　　 R = Y　　　　　　　　　　　　　　　　 + 1.402 (Cr-128)</P>
<P>　　　　　 G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)</P>
<P>　　　　　 B = Y + 1.772 (Cb-128)</P>
<P><A name=Orientation></A></P>
<P>在JFIF文件格式中，图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中的第一个图像样本是图像左上角的样本。</P>
<DIR></FONT><B><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P><A name=Spatial><A name=Ext1><A name=Tips></A></A></A>6.3.2 </FONT><FONT lang=ZH-CN face=宋体 color=#ff0000 size=3>文件结构</P></DIR></B></FONT><FONT lang=ZH-CN face=宋体>
<P>JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记，因此JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成，其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记：</P>
<OL>
<LI>SOI　 0xD8　　　　　　　　　　　 图像开始 
<LI>APP0 0xE0　　　　　　　　　　　 JFIF应用数据块 
<LI>APPn 0xE1 - 0xEF　　　 其他的应用数据块(n, 1～15) 
<LI>DQT　 0xDB　　　　　　　　　　　量化表 
<LI>SOF0 0xC0　　　　　　　　　　　 帧开始 
<LI>DHT　 0xC4　　　　　　　　　　　霍夫曼(Huffman)表 
<LI>SOS　 0xDA　　　　　　　　　　　扫描线开始 
<LI>EOI　 0xD9　　　　　　　　　　　 图像结束</LI></OL>
<P>为使读者对JPEG定义的标记一目了然，现将JPEG的标记码列于表6-05，并保留英文解释。</P>
<DIR><B>
<P align=center>表6-05 JPEG定义的标记</P></DIR></B></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 cellPadding=1 width=536 border=1>
<TBODY>
<TR>
<TD vAlign=top width="28%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>Symbol </P>
<P align=center>(符号)</B></FONT></P></TD>
<TD vAlign=top width="30%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>Code Assignment</P>
<P align=center>(标记代码)</B></FONT></P></TD>
<TD vAlign=top width="42%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>Description</P>
<P align=center>(说明)</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P>Start Of Frame markers, non-hierarchical Huffman coding</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>0</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC0</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Baseline DCT</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>1</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC1</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Extended sequential DCT</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>2</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC2</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Progressive DCT</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>3</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC3</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Spatial (sequential) lossless </FONT></P></TD></TR>
<TR>
<TD vAlign=top colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P>Start Of Frame markers, hierarchical Huffman coding</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>5</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC5</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Differential sequential DCT</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>6</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC6</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Differential progressive DCT</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>7</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC7</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Differential spatial lossless</FONT></P></TD></TR>
<TR>
<TD vAlign=top colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P>Start Of Frame markers, non-hierarchical arithmetic coding</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>JPG</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC8</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Reserved for JPEG extensions</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>9</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC9</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Extended sequential DCT</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>10</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFCA</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Progressive DCT</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>11</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFCB</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Spatial (sequential) Lossless</FONT></P></TD></TR>
<TR>
<TD vAlign=top colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P>Start Of Frame markers, hierarchical arithmetic coding</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>13</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFCD</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Differential sequential DCT</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>14</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFCE</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Differential progressive DCT</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOF<SUB>15</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFCF</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Differential spatial Lossless</FONT></P></TD></TR>
<TR>
<TD vAlign=top colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P>Huffman table specification</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>DHT</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFC4</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Define Huffman table(s)</FONT></P></TD></TR>
<TR>
<TD vAlign=top colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P>arithmetic coding conditioning specification</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>DAC</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFCC</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Define arithmetic conditioning table</FONT></P></TD></TR>
<TR>
<TD vAlign=top colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P>Restart interval termination</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>RSTm</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFD0～0xFFD7</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Restart with modulo 8 counter m</FONT></P></TD></TR>
<TR>
<TD vAlign=top colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P>Other marker</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOI</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFD8</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Start of image</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>EOI</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFD9</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>End of image</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>SOS</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFDA</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Start of scan</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>DQT</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFDB</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Define quantization table(s)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>DNL</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFDC</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Define number of lines</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>DRI</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFDD</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Define restart interval</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>DHP</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFDE</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Define hierarchical progression</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>EXP</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFDF</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Expand reference image(s) </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>APP<SUB>n</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFE0～0xFFEF</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Reserved for application use</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>JPG<SUB>n</SUB></FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFF0～0xFFFD</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Reserved for JPEG extension</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>COM</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFFFE</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Comment</FONT></P></TD></TR>
<TR>
<TD vAlign=top colSpan=3><B><FONT lang=ZH-CN face=宋体>
<P>Reserved markers</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>TEM</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFF01</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>For temporary use in arithmetic coding</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="28%"><FONT lang=ZH-CN face=宋体>
<P>RES</FONT></P></TD>
<TD vAlign=top width="30%"><FONT lang=ZH-CN face=宋体>
<P>0xFF02～0xFFBF</FONT></P></TD>
<TD vAlign=top width="42%"><FONT lang=ZH-CN face=宋体>
<P>Reserved</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>JPEG文件由下面的8个部分组成：</P>
<DIR>
<DIR>
<P>(1) 图像开始SOI(Start of Image)标记</P>
<P>(2) APP0标记(Marker)</P></DIR>
<P>① APP0长度(length)</P>
<P>② 标识符(identifier)</P>
<P>③ 版本号(version)</P>
<P>④ X和Y的密度单位(units=0：无单位；units=1：点数/英寸；units=2：点数/厘米)</P>
<P>⑤ X方向像素密度(X density)</P>
<P>⑥ Y方向像素密度(Y density)</P>
<P>⑦ 缩略图水平像素数目(thumbnail horizontal pixels)</P>
<P>⑧ 缩略图垂直像素数目(thumbnail vertical pixels)</P>
<P>⑨ 缩略图RGB位图(thumbnail RGB bitmap)</P>
<DIR>
<P>(3) APPn标记(Markers)，其中n=1～15(任选)</P></DIR>
<P>① APPn长度(length)</P>
<P>② 由于详细信息(application specific information)</P>
<DIR>
<P>(4) 一个或者多个量化表DQT(difine quantization table)</P></DIR>
<P>① 量化表长度(quantization table length)</P>
<P>② 量化表数目(quantization table number)</P>
<P>③ 量化表(quantization table)</P>
<DIR>
<P>(5) 帧图像开始SOF0(Start of Frame)</P></DIR>
<P>① 帧开始长度(start of frame length)</P>
<P>② 精度(precision)，每个颜色分量每个像素的位数(bits per pixel per color component)</P>
<P>③ 图像高度(image height)</P>
<P>④ 图像宽度(image width)</P>
<P>⑤ 颜色分量数(number of color components)</P>
<P>⑥ 对每个颜色分量(for each component)</P></DIR>
<UL>
<UL>
<LI>ID 
<LI>垂直方向的样本因子(vertical sample factor) 
<LI>水平方向的样本因子(horizontal sample factor) 
<LI>量化表号(quantization table#)</LI></UL></UL>
<DIR>
<DIR>
<P>(6) 一个或者多个霍夫曼表DHT(Difine Huffman Table)</P></DIR>
<P>① 霍夫曼表的长度(Huffman table length)</P>
<P>② 类型、AC或者DC(Type, AC or DC)</P>
<P>③ 索引(Index)</P>
<P>④ 位表(bits table)</P>
<P>⑤ 值表(value table)</P>
<DIR>
<P>(7) 扫描开始SOS(Start of Scan)</P></DIR>
<P>① 扫描开始长度(start of scan length)</P>
<P>② 颜色分量数(number of color components)</P>
<P>③ 每个颜色分量</P></DIR>
<UL>
<UL>
<LI>ID 
<LI>交流系数表号(AC table #) 
<LI>直流系数表号(DC table #)</LI></UL></UL>
<DIR>
<P>④ 压缩图像数据(compressed image data)</P>
<DIR>
<P>(8) 图像结束EOI(End of Image)</P></DIR></DIR>
<P>表6-06表示了APP0域的详细结构。有兴趣的读者可通过UltraEdit或者PC TOOLS等工具软件打开一个JPG图像文件，对APP0的结构进行分析和验证。</P>
<DIR><B>
<P align=center>表6-06 JFIF格式中APP0域的详细结构</P></DIR></B></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 cellPadding=1 width=558 border=1>
<TBODY>
<TR>
<TD vAlign=top width="7%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>偏移</B></FONT></P></TD>
<TD vAlign=top width="8%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>长度</B></FONT></P></TD>
<TD vAlign=top width="10%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>内容</B></FONT></P></TD>
<TD vAlign=top width="36%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>块的名称</B></FONT></P></TD>
<TD vAlign=top width="39%"><B><FONT lang=ZH-CN face=宋体>
<P align=center>说明</B></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>0</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>2 byte</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0xFFD8</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>(Start of Image,SOI)</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>图像开始</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>2</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>2 byte</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0xFFE0</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>APP0(JFIF application segment)</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>JFIF应用数据块</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>4</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>2 bytes</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>length of APP0 block</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>APP0块的长度</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>6</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>5 bytes</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>"JFIF"+"0"</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>识别APP0标记</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>11</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>&lt;Major version&gt;</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>主要版本号(如版本1.02中的1)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>12</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>&lt;Minor version&gt;</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>次要版本号(如版本1.02中的02)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>13</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>&lt;Units for the X<BR>and Y densities&gt;</P></FONT></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>X和Y的密度单位</P>
<P>units=0：无单位</P>
<P>units=1：点数/英寸</P>
<P>units=2：点数/厘米</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>14</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>2 bytes</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>&lt;Xdensity&gt;</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>水平方向像素密度</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>16</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>2 bytes</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>&lt;Ydensity&gt;</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>垂直方向像素密度</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>18</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>&lt;Xthumbnail&gt;</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>缩略图水平像素数目</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%"><FONT lang=ZH-CN face=宋体>
<P>19</FONT></P></TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>1 byte</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>&lt;Ythumbnail&gt;</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>缩略图垂直像素数目</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%">　</TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>3n</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>&lt; Thumbnail RGB bitmap&gt;</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>缩略RGB位图(n为缩略图的像素数)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%">　</TD>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>Optional JFIF extension APP0 marker segment(s)</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>任选的JFIF扩展APP0标记段</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="7%">　</TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>……</FONT></P></TD>
<TD vAlign=top width="10%">　</TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>……</FONT></P></TD>
<TD vAlign=top width="39%">　</TD></TR>
<TR>
<TD vAlign=top width="7%">　</TD>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>2 byte</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0xFFD9</FONT></P></TD>
<TD vAlign=top width="36%"><FONT lang=ZH-CN face=宋体>
<P>(EOI) end-of-file</FONT></P></TD>
<TD vAlign=top width="39%"><FONT lang=ZH-CN face=宋体>
<P>图像文件结束标记</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>　</P></FONT><img src ="http://www.blogjava.net/georgehill/aggbug/6551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/georgehill/" target="_blank">小米</a> 2005-06-22 16:53 <a href="http://www.blogjava.net/georgehill/articles/6551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GIF文件格式</title><link>http://www.blogjava.net/georgehill/articles/6550.html</link><dc:creator>小米</dc:creator><author>小米</author><pubDate>Wed, 22 Jun 2005 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/georgehill/articles/6550.html</guid><wfw:comment>http://www.blogjava.net/georgehill/comments/6550.html</wfw:comment><comments>http://www.blogjava.net/georgehill/articles/6550.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/georgehill/comments/commentRss/6550.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/georgehill/services/trackbacks/6550.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 6.2 GIF文件格式6.2.1 简介GIF(Graphics Interchange Format)是CompuServe公司开发的图像文件存储格式，1987年开发的GIF文件格式版本号是GIF87a，1989年进行了扩充，扩充后的版本号定义为GIF89a。GFI图像文件以数据块(block)为单位来存储图像的相关信息。一个GIF文件由表示图形/图像的数据块、数据子块以及显示图形...&nbsp;&nbsp;<a href='http://www.blogjava.net/georgehill/articles/6550.html'>阅读全文</a><img src ="http://www.blogjava.net/georgehill/aggbug/6550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/georgehill/" target="_blank">小米</a> 2005-06-22 16:52 <a href="http://www.blogjava.net/georgehill/articles/6550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BMP文件格式</title><link>http://www.blogjava.net/georgehill/articles/6549.html</link><dc:creator>小米</dc:creator><author>小米</author><pubDate>Wed, 22 Jun 2005 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/georgehill/articles/6549.html</guid><wfw:comment>http://www.blogjava.net/georgehill/comments/6549.html</wfw:comment><comments>http://www.blogjava.net/georgehill/articles/6549.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/georgehill/comments/commentRss/6549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/georgehill/services/trackbacks/6549.html</trackback:ping><description><![CDATA[<DIV class=xTitle align=center>6.1 BMP文件格式</DIV><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P>6.1.1 简介</P>
<DIR></DIR></B></FONT><FONT lang=ZH-CN face=宋体>
<P>位图文件(<B>B</B>it<B>m</B>a<B>p</B>-File，BMP)格式是Windows采用的图像文件存储格式，在Windows环境下运行的所有图像处理软件都支持这种格式。Windows 3.0以前的BMP位图文件格式与显示设备有关，因此把它称为设备相关位图(<B>d</B>evice-<B>d</B>ependent <B>b</B>itmap，DDB)文件格式。Windows 3.0以后的BMP位图文件格式与显示设备无关，因此把这种BMP位图文件格式称为设备无关位图(<B>d</B>evice-<B>i</B>ndependent <B>b</B>itmap，DIB)格式，目的是为了让Windows能够在任何类型的显示设备上显示BMP位图文件。BMP位图文件默认的文件扩展名是BMP或者bmp。</P>
<DIR></FONT><B><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P>6.1.2 文件结构</P></DIR></B></FONT><FONT lang=ZH-CN face=宋体>
<P>位图文件可看成由4个部分组成：位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列，它们的名称和符号如表6-01所示。</P>
<DIR><B>
<P align=center>表6-01 BMP图像文件组成部分的名称和符号</P></DIR></B></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 cellPadding=1 width=490 border=1>
<TBODY>
<TR>
<TD vAlign=top width="54%"><FONT lang=ZH-CN face=宋体>
<P align=center>位图文件的组成</FONT></P></TD>
<TD vAlign=top width="25%"><FONT lang=ZH-CN face=宋体>
<P align=center>结构名称</FONT></P></TD>
<TD vAlign=top width="21%"><FONT lang=ZH-CN face=宋体>
<P align=center>符号</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="54%"><FONT lang=ZH-CN face=宋体>
<P>位图文件头(bitmap-file header)</FONT></P></TD>
<TD vAlign=top width="25%"><FONT lang=ZH-CN face=宋体>
<P>BITMAPFILEHEADER</FONT></P></TD>
<TD vAlign=top width="21%"><FONT lang=ZH-CN face=宋体>
<P>bmfh</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="54%"><FONT lang=ZH-CN face=宋体>
<P>位图信息头(bitmap-information header)</FONT></P></TD>
<TD vAlign=top width="25%"><FONT lang=ZH-CN face=宋体>
<P>BITMAPINFOHEADER</FONT></P></TD>
<TD vAlign=top width="21%"><FONT lang=ZH-CN face=宋体>
<P>bmih</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="54%"><FONT lang=ZH-CN face=宋体>
<P>彩色表(color table)</FONT></P></TD>
<TD vAlign=top width="25%"><FONT lang=ZH-CN face=宋体>
<P>RGBQUAD</FONT></P></TD>
<TD vAlign=top width="21%"><FONT lang=ZH-CN face=宋体>
<P>aColors[]</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="54%"><FONT lang=ZH-CN face=宋体>
<P>图像数据阵列字节</FONT></P></TD>
<TD vAlign=top width="25%"><FONT lang=ZH-CN face=宋体>
<P>BYTE</FONT></P></TD>
<TD vAlign=top width="21%"><FONT lang=ZH-CN face=宋体>
<P>aBitmapBits[]</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>位图文件结构可综合在表6-02中。</P>
<DIR><B>
<P align=center>表6-02 位图文件结构内容摘要</P></DIR></B></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 cellPadding=7 width=568 border=1>
<TBODY>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P align=center>偏移量</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P align=center>域的名称</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P align=center>大小</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P align=center>内容</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>　</P>
<P>　</P>
<P>　</P>
<P>图像文件</P>
<P>头</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0000h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>标识符(Identifier)</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>2 bytes</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>两字节的内容用来识别位图的类型：</P></FONT>
<P>‘<FONT lang=ZH-CN face=宋体>BM</FONT>’<FONT lang=ZH-CN face=宋体> ： Windows 3.1x, 95, NT, </FONT>…</P>
<P>‘<FONT lang=ZH-CN face=宋体>BA</FONT>’<FONT lang=ZH-CN face=宋体> ：OS/2 Bitmap Array</P></FONT>
<P>‘<FONT lang=ZH-CN face=宋体>CI</FONT>’<FONT lang=ZH-CN face=宋体> ：OS/2 Color Icon</P></FONT>
<P>‘<FONT lang=ZH-CN face=宋体>CP</FONT>’<FONT lang=ZH-CN face=宋体> ：OS/2 Color Pointer</P></FONT>
<P>‘<FONT lang=ZH-CN face=宋体>IC</FONT>’<FONT lang=ZH-CN face=宋体> ： OS/2 Icon</P></FONT>
<P>‘<FONT lang=ZH-CN face=宋体>PT</FONT>’<FONT lang=ZH-CN face=宋体> ：OS/2 Pointer</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0002h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>File Size</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>用字节表示的整个文件的大小</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0006h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Reserved</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>保留，设置为0</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>000Ah</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Bitmap Data Offset</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>从文件开始到位图数据开始之间的数据(bitmap data)之间的偏移量</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>000Eh</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Bitmap Header Size</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>位图信息头(Bitmap Info Header)的长度，用来描述位图的颜色、压缩方法等。下面的长度表示：</P>
<P>28h - Windows 3.1x, 95, NT, </FONT><FONT face="宋体, MS Song">…</FONT></P><FONT lang=ZH-CN face=宋体>
<P>0Ch - OS/2 1.x</P>
<P>F0h - OS/2 2.x</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0012h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Width</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>位图的宽度，以像素为单位</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0016h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Height</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>位图的高度，以像素为单位</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>001Ah</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Planes</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 word</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>位图的位面数</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P><BR>图像</P>
<P>信息</P>
<P>头</P>
<P>　</P>
<P>　</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>001Ch</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Bits Per Pixel</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 word</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>每个像素的位数</P>
<P>1 - Monochrome bitmap</P>
<P>4 - 16 color bitmap</P>
<P>8 - 256 color bitmap</P>
<P>16 - 16bit (high color) bitmap</P>
<P>24 - 24bit (true color) bitmap</P>
<P>32 - 32bit (true color) bitmap</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>001Eh</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Compression</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>压缩说明：</P>
<P>0 - none (也使用BI_RGB表示)</P>
<P>1 - RLE 8-bit / pixel (也使用BI_RLE4表示)</P>
<P>2 - RLE 4-bit / pixel (也使用BI_RLE8表示)</P>
<P>3 - Bitfields (也使用BI_BITFIELDS表示)</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0022h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Bitmap Data Size</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>用字节数表示的位图数据的大小。该数必须是4的倍数</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0026h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>HResolution</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>用像素/米表示的水平分辨率</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>002Ah</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>VResolution</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>用像素/米表示的垂直分辨率</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>002Eh</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Colors</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>位图使用的颜色数。如8-位/像素表示为100h或者 256.</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%">　</TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0032h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Important Colors</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>1 dword</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>指定重要的颜色数。当该域的值等于颜色数时，表示所有颜色都一样重要</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>调色板数据</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0036h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Palette</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>N * 4 byte</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>调色板规范。对于调色板中的每个表项，这4个字节用下述方法来描述RGB的值：</P>
<UL>
<LI>1字节用于蓝色分量 
<LI>1字节用于绿色分量 
<LI>1字节用于红色分量 
<LI>1字节用于填充符(设置为0)</LI></UL></FONT></TD></TR>
<TR>
<TD vAlign=top width="8%"><FONT lang=ZH-CN face=宋体>
<P>图像数据</FONT></P></TD>
<TD vAlign=top width="10%"><FONT lang=ZH-CN face=宋体>
<P>0436h</FONT></P></TD>
<TD vAlign=top width="16%"><FONT lang=ZH-CN face=宋体>
<P>Bitmap Data</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P>x bytes</FONT></P></TD>
<TD vAlign=top width="55%"><FONT lang=ZH-CN face=宋体>
<P>该域的大小取决于压缩方法，它包含所有的位图数据字节，这些数据实际就是彩色调色板的索引号</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>　</P>
<DIR></FONT><B><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P>6.1.3 构件详解</P></DIR></FONT><FONT lang=ZH-CN face=宋体 color=#800080>
<P>1. 位图文件头</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>位图文件头包含有关于文件类型、文件大小、存放位置等信息，在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义：</P>
<P>typedef struct tagBITMAPFILEHEADER { /* bmfh */</P>
<P>UINT bfType;</P>
<P>DWORD bfSize;</P>
<P>UINT bfReserved1;</P>
<P>UINT bfReserved2;</P>
<P>DWORD bfOffBits;</P>
<P>} BITMAPFILEHEADER;</P>
<P>其中：</P></FONT>
<TABLE cellSpacing=0 cellPadding=1 width=557 border=0>
<TBODY>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>bfType</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明文件的类型. </P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>bfSize</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明文件的大小，用字节为单位</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>bfReserved1</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>保留，设置为0</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>bfReserved2</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>保留，设置为0</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>bfOffBits</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明从BITMAPFILEHEADER结构开始到实际的图像数据之间的字 节偏移量</P></DIR></FONT></TD></TR></TBODY></TABLE><FONT lang=ZH-CN face=宋体>
<P>　</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>2. 位图信息头</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>位图信息用BITMAPINFO结构来定义，它由位图信息头(bitmap-information header)和彩色表(color table)组成，前者用BITMAPINFOHEADER结构定义，后者用RGBQUAD结构定义。BITMAPINFO结构具有如下形式：</P>
<P>typedef struct tagBITMAPINFO { /* bmi */</P>
<P>BITMAPINFOHEADER bmiHeader;</P>
<P>RGBQUAD bmiColors[1];</P>
<P>} BITMAPINFO;</P>
<P>其中：</P></FONT>
<TABLE cellSpacing=0 cellPadding=1 width=557 border=0>
<TBODY>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>bmiHeader</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明BITMAPINFOHEADER结构</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>bmiColors</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明彩色表RGBQUAD结构的阵列</P></DIR></FONT></TD></TR></TBODY></TABLE><FONT lang=ZH-CN face=宋体>
<P>BITMAPINFOHEADER结构包含有位图文件的大小、压缩类型和颜色格式，其结构定义为：</P>
<P>typedef struct tagBITMAPINFOHEADER { /* bmih */</P>
<P>DWORD biSize;</P>
<P>LONG biWidth;</P>
<P>LONG biHeight;</P>
<P>WORD biPlanes;</P>
<P>WORD biBitCount;</P>
<P>DWORD biCompression;</P>
<P>DWORD biSizeImage;</P>
<P>LONG biXPelsPerMeter;</P>
<P>LONG biYPelsPerMeter;</P>
<P>DWORD biClrUsed;</P>
<P>DWORD biClrImportant;</P>
<P>} BITMAPINFOHEADER;</P>
<P>其中：</P></FONT>
<TABLE cellSpacing=0 cellPadding=1 width=557 border=0>
<TBODY>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biSize</P></DIR></FONT></TD>
<TD vAlign=top width="77%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明BITMAPINFOHEADER结构所需要的字节数</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biWidth</P></DIR></FONT></TD>
<TD vAlign=top width="77%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明图像的宽度，以像素为单位</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biHeight</P></DIR></FONT></TD>
<TD vAlign=top width="77%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明图像的高度，以像素为单位</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biPlanes</P></DIR></FONT></TD>
<TD vAlign=top width="77%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>为目标设备说明位面数，其值设置为1</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biBitCount</P></DIR></FONT></TD>
<TD vAlign=top width="77%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明位数/像素，其值为1、2、4或者24</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biCompression</P></DIR></FONT></TD>
<TD vAlign=top width="77%">
<UL><FONT lang=ZH-CN face=宋体>
<LI>说明图像数据压缩的类型。其值可以是下述值之一：<BR>BI_RGB：没有压缩； 
<LI>BI_RLE8：每个像素8位的RLE压缩编码，压缩格式由2字节组成(重复像素计数和颜色索引)； 
<LI>BI_RLE4：每个像素4位的RLE压缩编码，压缩格式由2字节组成</LI></UL></FONT></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biSizeImage</P></DIR></FONT></TD>
<TD vAlign=top width="77%"><FONT lang=ZH-CN face=宋体>
<P>说明图像的大小，以字节为单位。当用BI_RGB格式时，可设置为0</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biXPelsPerMeter</P></DIR></FONT></TD>
<TD vAlign=top width="77%"><FONT lang=ZH-CN face=宋体>
<P>说明水平分辨率，用像素/米表示</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biYPelsPerMeter</P></DIR></FONT></TD>
<TD vAlign=top width="77%"><FONT lang=ZH-CN face=宋体>
<P>说明垂直分辨率，用像素/米表示</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biClrUsed</P></DIR></FONT></TD>
<TD vAlign=top width="77%"><FONT lang=ZH-CN face=宋体>
<P>说明位图实际使用的彩色表中的颜色索引数</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="23%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>biClrImportant</P></DIR></FONT></TD>
<TD vAlign=top width="77%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>说明对图像显示有重要影响的颜色索引的数目，如果是0，表示都重要。</P></DIR></FONT></TD></TR></TBODY></TABLE><FONT lang=ZH-CN face=宋体>
<P>现就BITMAPINFOHEADER结构作如下说明：</P><B>
<P>(1) 彩色表的定位</P></B>
<P>应用程序可使用存储在biSize成员中的信息来查找在BITMAPINFO结构中的彩色表，如下所示：</P>
<P>pColor = ((LPSTR) pBitmapInfo + (WORD) (pBitmapInfo-&gt;bmiHeader.biSize))</P><B>
<P>(2) biBitCount</P>
<P>biBitCount=1 </B>表示位图最多有两种颜色，黑色和白色。图像数据阵列中的每一位表示一个像素。</P><B>
<P>biBitCount=4 </B>表示位图最多有16种颜色。每个像素用4位表示，并用这4位作为彩色表的表项来查找该像素的颜色。例如，如果位图中的第一个字节为0x1F，它表示有两个像素，第一像素的颜色就在彩色表的第2表项中查找，而第二个像素的颜色就在彩色表的第16表项中查找。</P><B>
<P>biBitCount=8 </B>表示位图最多有256种颜色。每个像素用8位表示，并用这8位作为彩色表的表项来查找该像素的颜色。例如，如果位图中的第一个字节为0x1F，这个像素的颜色就在彩色表的第32表项中查找。</P><B>
<P>biBitCount=24 </B>表示位图最多有2<SUP>24</SUP>＝16 777 216种颜色。bmiColors (或者bmciColors)成员就为NULL。每3个字节代表一个像素，其颜色有R、G、B字节的相对强度决定。</P><B>
<P>(3) ClrUsed</P></B>
<P>BITMAPINFOHEADER结构中的成员ClrUsed指定实际使用的颜色数目。如果ClrUsed设置成0，位图使用的颜色数目就等于biBitCount成员中的数目。</P><B>
<P>(4) 图像数据压缩</P>
<P>① BI_RLE8：</B>每个像素为8位的RLE压缩编码，可使用编码方式和绝对方式中的任何一种进行压缩，这两种方式可在同一幅图中的任何地方使用。</P><B>
<P>编码方式</B>：由2个字节组成，第一个字节指定使用相同颜色的像素数目，第二个字节指定使用的颜色索引。此外，这个字节对中的第一个字节可设置为0，联合使用第二个字节的值表示：</P>
<UL>
<LI>第二个字节的值为0：行的结束。 
<LI>第二个字节的值为1：图像结束。 
<LI>第二个字节的值为2：其后的两个字节表示下一个像素从当前开始的水平和垂直位置的偏移量。</LI></UL><B>
<P>绝对方式</B>：第一个字节设置为0，而第二个字节设置为0x03～0xFF之间的一个值。在这种方式中，第二个字节表示跟在这个字节后面的字节数，每个字节包含单个像素的颜色索引。压缩数据格式需要字边界(word boundary)对齐。</P><B>
<P>[例6.1] </B>用十六进制表示的8位压缩图像数据如下：</P>
<P>03 04 05 06 00 03 45 56 67 00 02 78 00 02 05 01 02 78 00 00 09 1E 00 01<BR>这些压缩数据可解释为 ：</P></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 cellPadding=1 width=352 border=1>
<TBODY>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P align=center>压缩数据 </FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P align=center>扩展数据</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>03 04</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>04 04 04 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>05 06</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>06 06 06 06 06 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>00 03 45 56 67 00</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>45 56 67 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>02 78</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>78 78 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>00 02 05 01</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>从当前位置右移5个位置后向下移一行</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>02 78</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>78 78 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>00 00</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>行结束</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>09 1E</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>1E 1E 1E 1E 1E 1E 1E 1E 1E </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>00 01</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>RLE编码图像结束 </FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体><B>
<P>② BI_RLE4：</B>每个像素为4位的RLE压缩编码，同样也可使用编码方式和绝对方式中的任何一种进行压缩，这两种方式也可在同一幅图中的任何地方使用。这两种方式是：</P>
<P>编码方式：由2个字节组成，第一个字节指定像素数目，第二个字节包含两种颜色索引，一个在高4位，另一个在低4位。第一个像素使用高4位的颜色索引，第二个使用低4位的颜色索引，第3个使用高4位的颜色索引，依此类推。</P>
<P>绝对方式：这个字节对中的第一个字节设置为0，第二个字节包含有颜色索引数，其后续字节包含有颜色索引，颜色索引存放在该字节的高、低4位中，一个颜色索引对应一个像素。此外，BI_RLE4也同样联合使用第二个字节中的值表示：</P>
<UL>
<LI>第二个字节的值为0：行的结束。 
<LI>第二个字节的值为1：图像结束。 
<LI>第二个字节的值为2：其后的两个字节表示下一个像素从当前开始的水平和垂直位置的偏移量。</LI></UL><B>
<P>[例6.2] </B>用十六进制数表示的4位压缩图像数据：</P>
<P>03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 04 78 00 00 09 1E 00 01</P>
<P>这些压缩数据可解释为 ：</P></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=2 cellPadding=1 width=352 border=1>
<TBODY>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P align=center>压缩数据</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P align=center>扩展数据</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>03 04</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>0 4 0</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>05 06</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>0 6 0 6 0 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>00 06 45 56 67 00</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>4 5 5 6 6 7 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>04 78</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>7 8 7 8 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>00 02 05 01</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>从当前位置右移5个位置后向下移一行</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>04 78</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>7 8 7 8 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>00 00</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>行结束</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>09 1E</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>1 E 1 E 1 E 1 E 1 </FONT></P></TD></TR>
<TR>
<TD vAlign=top width="32%"><FONT lang=ZH-CN face=宋体>
<P>00 01</FONT></P></TD>
<TD vAlign=top width="68%"><FONT lang=ZH-CN face=宋体>
<P>RLE图像结束 </FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P>　</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>3. 彩色表</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>彩色表包含的元素与位图所具有的颜色数相同，像素的颜色用RGBQUAD结构来定义。对于24-位真彩色图像就不使用彩色表，因为位图中的RGB值就代表了每个像素的颜色。彩色表中的颜色按颜色的重要性排序，这可以辅助显示驱动程序为不能显示足够多颜色数的显示设备显示彩色图像。RGBQUAD结构描述由R、G、B相对强度组成的颜色，定义如下：</P>
<P>typedef struct tagRGBQUAD { /* rgbq */</P>
<P>BYTE rgbBlue;</P>
<P>BYTE rgbGreen;</P>
<P>BYTE rgbRed;</P>
<P>BYTE rgbReserved;</P>
<P>} RGBQUAD;</P>
<P>其中：</P></FONT>
<TABLE cellSpacing=0 cellPadding=1 width=557 border=0>
<TBODY>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>rgbBlue</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>指定蓝色强度</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>rgbGreen</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>指定绿色强度</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>rgbRed</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>指定红色强度</P></DIR></FONT></TD></TR>
<TR>
<TD vAlign=top width="22%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>rgbReserved</P></DIR></FONT></TD>
<TD vAlign=top width="78%">
<DIR><FONT lang=ZH-CN face=宋体>
<P>保留，设置为0</P></DIR></FONT></TD></TR></TBODY></TABLE><FONT lang=ZH-CN face=宋体>
<P>　</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>4. 位图数据</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>紧跟在彩色表之后的是图像数据字节阵列。图像的每一扫描行由表示图像像素的连续的字节组成，每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度。扫描行是由底向上存储的，这就是说，阵列中的第一个字节表示位图左下角的像素，而最后一个字节表示位图右上角的像素。</P></FONT><img src ="http://www.blogjava.net/georgehill/aggbug/6549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/georgehill/" target="_blank">小米</a> 2005-06-22 16:50 <a href="http://www.blogjava.net/georgehill/articles/6549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JPEG压缩编码</title><link>http://www.blogjava.net/georgehill/articles/6548.html</link><dc:creator>小米</dc:creator><author>小米</author><pubDate>Wed, 22 Jun 2005 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/georgehill/articles/6548.html</guid><wfw:comment>http://www.blogjava.net/georgehill/comments/6548.html</wfw:comment><comments>http://www.blogjava.net/georgehill/articles/6548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/georgehill/comments/commentRss/6548.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/georgehill/services/trackbacks/6548.html</trackback:ping><description><![CDATA[<DIV class=xTitle align=center>5.7 JPEG压缩编码</DIV><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P>5.7.1 JPEG算法概要</P>
<DIR></DIR></B></FONT><FONT lang=ZH-CN face=宋体>
<P>JPEG(Joint Photographic Experts Group) 是一个由 ISO和IEC两个组织机构联合组成的一个专家组，负责制定静态的数字图像数据压缩编码标准，这个专家组开发的算法称为JPEG算法，并且成为国际上通用的标准，因此又称为JPEG标准。JPEG是一个适用范围很广的静态图像数据压缩标准，既可用于灰度图像又可用于彩色图像。</P>
<P>JPEG专家组开发了两种基本的压缩算法，一种是采用以离散余弦变换(Discrete Cosine Transform，DCT)为基础的有损压缩算法，另一种是采用以预测技术为基础的无损压缩算法。使用有损压缩算法时，在压缩比为25:1的情况下，压缩后还原得到的图像与原始图像相比较，非图像专家难于找出它们之间的区别，因此得到了广泛的应用。例如，在V-CD和DVD-Video电视图像压缩技术中，就使用JPEG的有损压缩算法来取消空间方向上的冗余数据。为了在保证图像质量的前提下进一步提高压缩比，近年来JPEG专家组正在制定JPEG 2000(简称JP 2000)标准，这个标准中将采用小波变换(wavelet)算法。</P>
<P>JPEG压缩是有损压缩，它利用了人的视角系统的特性，使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息。JPEG算法框图如图5-13所示，压缩编码大致分成三个步骤：</P>
<OL>
<LI>使用正向离散余弦变换(<B>f</B>orward <B>d</B>iscrete <B>c</B>osine <B>t</B>ransform，FDCT)把空间域表示的图变换成频率域表示的图。 
<LI>使用加权函数对DCT系数进行量化，这个加权函数对于人的视觉系统是最佳的。 
<LI>使用霍夫曼可变字长编码器对量化系数进行编码。</LI></OL>
<P>译码或者叫做解压缩的过程与压缩编码过程正好相反。</P>
<P>JPEG算法与彩色空间无关，因此“RGB到YUV变换”和“YUV到RGB变换”不包含在JPEG算法中。JPEG算法处理的彩色图像是单独的彩色分量图像，因此它可以压缩来自不同彩色空间的数据，如RGB, YCbCr和CMYK。</P>
<P align=center><IMG height=351 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5248.gif" width=468></P>
<P align=center>图5-13 JPEG压缩编码-解压缩算法框图</P>
<P>　</P>
<DIR></FONT><B><FONT lang=ZH-CN face=宋体 color=#ff0000>
<P>5.7.2 JPEG算法的主要计算步骤</P></DIR></B></FONT><FONT lang=ZH-CN face=宋体>
<P>JPEG压缩编码算法的主要计算步骤如下：</P>
<OL>
<LI>正向离散余弦变换(FDCT)。 
<LI>量化(quantization)。 
<LI>Z字形编码(zigzag scan)。 
<LI>使用差分脉冲编码调制(<B>d</B>ifferential <B>p</B>ulse <B>c</B>ode <B>m</B>odulation，DPCM)对直流系数(DC)进行编码。 
<LI>使用行程长度编码(<B>r</B>un-<B>l</B>ength <B>e</B>ncoding，RLE)对交流系数(AC)进行编码。 
<LI>熵编码(entropy coding)。</LI></OL></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>1. 正向离散余弦变换</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>下面对正向离散余弦变换(FDCT)变换作几点说明。</P>
<P>(1) 对每个单独的彩色图像分量，把整个分量图像分成8×8的图像块，如图5-14所示，并作为两维离散余弦变换DCT的输入。通过DCT变换，把能量集中在少数几个系数上。</P>
<P align=center><IMG height=119 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5249.gif" width=401></P>
<P align=center>图5-14 离散余弦变换</P>
<P>(2) DCT变换使用下式计算，</P>
<P><IMG height=45 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5250.gif" width=454>　...... (5-1)<BR>它的逆变换使用下式计算，</P>
<P><IMG height=53 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5251.gif" width=449>　...... (5-2)<BR>上面两式中，<BR><I>C(u), C(v) </I>= 1/<IMG height=22 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5252.gif" width=25>, 当<I>u, v</I> = 0；<BR><I>C(u), C(v) </I>= 1, 其他。<BR><I>f(i, j)</I>经DCT变换之后，<I>F(0，0)</I>是直流系数，其他为交流系数。</P>
<P>(3) 在计算两维的DCT变换时，可使用下面的计算式把两维的DCT变换变成一维的DCT变换，</P>
<P align=center><IMG height=50 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5253.gif" width=304>　 ............ (5-3)</P>
<P align=center><IMG height=51 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5254.gif" width=313>　............. (5-4)</P>
<P align=center><IMG height=160 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5255.gif" width=437></P>
<P align=center>图5-15 两维DCT变换方法</P>
<P>实际的计算方法可参看[6]</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>2. 量化</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>量化是对经过FDCT变换后的频率系数进行量化。量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。量化是图像质量下降的最主要原因。</P>
<P>对于有损压缩算法，JPEG算法使用如图5-16所示的均匀量化器进行量化，量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感，因此使用了两种量化表：如表5-05所示的亮度量化值和表5-06所示的色差量化值。此外，由于人眼对低频分量的图像比对高频分量的图像更敏感，因此图中的左上角的量化步距要比右下角的量化步距小。表5-05和表5-06中的数值对CCIR 601标准电视图像已经是最佳的。如果不使用这两种表，你也可以把自己的量化表替换它们。</P>
<P align=center><IMG height=160 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5256.gif" width=181></P>
<P align=center>图5-16 均匀量化器</P>
<DIR><B>
<P>表5-05 亮度量化值表 表5-06 色度量化值</P>
<P align=center><IMG height=205 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5257.gif" width=510></P>
<P align=center>　</P></DIR></FONT><FONT lang=ZH-CN face=宋体 color=#800080>
<P>3. Z字形编排</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>量化后的系数要重新编排，目的是为了增加连续的“0”系数的个数，就是“0”的游程长度，方法是按照Z字形的式样编排，如图5-17所示。这样就把一个8 <FONT face=Symbol>´</FONT> 8的矩阵变成一个1 <FONT face=Symbol>´</FONT> 64的矢量，频率较低的系数放在矢量的顶部。</P>
<P align=center>
<HR align=right width="8%" SIZE=2>
<IMG height=237 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5258.gif" width=396> 
<P></P>
<P align=center>图5-17 量化DCT系数的编排</P></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=1 cellPadding=1 width=256 border=1>
<TBODY>
<TR>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>0</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>1</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>5</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>6</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P align=center>14</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>15</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>27</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>28</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>2</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>4</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>7</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>13</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P align=center>16</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>26</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>29</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>42</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>3</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>8</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>12</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>17</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P align=center>25</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>30</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>41</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>43</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>9</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>11</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>18</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>24</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P align=center>31</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>40</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>44</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>53</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>10</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>19</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>23</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>32</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P align=center>39</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>45</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>52</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>54</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>20</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>22</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>33</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>38</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P align=center>46</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>51</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>55</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>60</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>21</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>34</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>37</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>47</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P align=center>50</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>56</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>59</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>61</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>35</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>36</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>48</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>49</FONT></P></TD>
<TD vAlign=top width="11%"><FONT lang=ZH-CN face=宋体>
<P align=center>57</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>58</FONT></P></TD>
<TD vAlign=top width="12%"><FONT lang=ZH-CN face=宋体>
<P align=center>62</FONT></P></TD>
<TD vAlign=top width="13%"><FONT lang=ZH-CN face=宋体>
<P align=center>63</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><FONT lang=ZH-CN face=宋体>
<P align=center>图5-18 量化DCT系数的序号</P>
<P>　</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>4. 直流系数的编码</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>8 <FONT face=Symbol>´</FONT> 8图像块经过DCT变换之后得到的DC直流系数有两个特点，一是系数的数值比较大，二是相邻8 <FONT face=Symbol>´</FONT> 8图像块的DC系数值变化不大。根据这个特点，JPEG算法使用了差分脉冲调制编码(DPCM)技术，对相邻图像块之间量化DC系数的差值(Delta)进行编码，</P><I>
<P align=center>Delta</I>＝<I>DC</I>(0, 0)<I><SUB>k</I></SUB>-<I>DC</I>(0, 0)<I><SUB>k</I>-1</SUB> ........ (5-5)</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>5. 交流系数的编码</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>量化AC系数的特点是1 <FONT face=Symbol>´</FONT> 64矢量中包含有许多“0”系数，并且许多“0”是连续的，因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。</P>
<P>JPEG使用了1个字节的高4位来表示连续“0”的个数，而使用它的低4位来表示编码下一个非“0”系数所需要的位数，跟在它后面的是量化AC系数的数值。</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#800080>
<P>6. 熵编码</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>使用熵编码还可以对DPCM编码后的直流DC系数和RLE编码后的交流AC系数作进一步的压缩。</P>
<P>在JPEG有损压缩算法中，使用霍夫曼编码器来减少熵。使用霍夫曼编码器的理由是可以使用很简单的查表(lookup table)方法进行编码。压缩数据符号时，霍夫曼编码器对出现频度比较高的符号分配比较短的代码，而对出现频度较低的符号分配比较长的代码。这种可变长度的霍夫曼码表可以事先进行定义。</P><B>
<P>[例5.1] </B>表5-07所示的是DC码表符号举例。如果DC的值(Value)为4，符号SSS用于表达实际值所需要的位数，实际位数就等于3。</P>
<DIR><B>
<P align=center>表5-07 DC码表符号举例</P></DIR></B></FONT>
<P align=center>
<CENTER>
<TABLE borderColor=#000000 cellSpacing=1 cellPadding=1 width=216 border=1>
<TBODY>
<TR>
<TD vAlign=top width="48%"><FONT lang=ZH-CN face=宋体>
<P align=center>Value</FONT></P></TD>
<TD vAlign=top width="52%"><FONT lang=ZH-CN face=宋体>
<P align=center>SSS</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="48%"><FONT lang=ZH-CN face=宋体>
<P align=center>0</FONT></P></TD>
<TD vAlign=top width="52%"><FONT lang=ZH-CN face=宋体>
<P align=center>0</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="48%"><FONT lang=ZH-CN face=宋体>
<P align=center>-1, 1</FONT></P></TD>
<TD vAlign=top width="52%"><FONT lang=ZH-CN face=宋体>
<P align=center>1</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="48%"><FONT lang=ZH-CN face=宋体>
<P align=center>-3,-2, 2,3</FONT></P></TD>
<TD vAlign=top width="52%"><FONT lang=ZH-CN face=宋体>
<P align=center>2</FONT></P></TD></TR>
<TR>
<TD vAlign=top width="48%"><FONT lang=ZH-CN face=宋体>
<P align=center>-7..-4, 4..7</FONT></P></TD>
<TD vAlign=top width="52%"><FONT lang=ZH-CN face=宋体>
<P align=center>3</FONT></P></TD></TR></TBODY></TABLE></CENTER>
<P></P><B><FONT lang=ZH-CN face=宋体>
<P>　</P></FONT><FONT lang=ZH-CN face=宋体 color=#800080>
<P>7. 组成位数据流</P></B></FONT><FONT lang=ZH-CN face=宋体>
<P>JPEG编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据，这样做的目的是为了便于传输、存储和译码器进行译码，这样的组织的数据通常称为JPEG位数据流(JPEG bitstream)。</P></FONT><B><FONT lang=ZH-CN face=宋体 color=#ff0000>
<DIR>
<P>5.7.3 应用JPEG算法举例</P></DIR></B></FONT><FONT lang=ZH-CN face=宋体>
<P>有关JPEG算法更详细的信息和数据，请参看JPEG标准ISO/IEC 10918。下面是使用JPEG算法对一个8×8图像块计算得到的结果。在这个例子中，计算正向离散余弦变换(FDCT)之前对源图像中的每个样本数据减去了128，在逆向离散余弦变换之后对重构图像中的每个样本数据加了128。</P>
<P align=center><IMG height=194 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5259.gif" width=246> <IMG height=190 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5260.gif" width=243></P>
<P align=center><IMG height=172 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5261.gif" width=288> <IMG height=173 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5262.gif" width=221></P>
<P align=center><IMG height=173 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5263.gif" width=231> <IMG height=173 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5263.gif" width=231></P>
<P align=center></P>
<P align=center><IMG height=145 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5264.gif" width=222> <IMG height=145 src="http://mti.xidian.edu.cn/multimedia/multi/img/imgc5264.gif" width=222></P>
<P align=center></P>
<P align=center>
<HR width="85%">

<P></P>
<P align=center>图5-19 JPEG压缩编码举例</P></FONT><img src ="http://www.blogjava.net/georgehill/aggbug/6548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/georgehill/" target="_blank">小米</a> 2005-06-22 16:49 <a href="http://www.blogjava.net/georgehill/articles/6548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript小技巧</title><link>http://www.blogjava.net/georgehill/articles/5272.html</link><dc:creator>小米</dc:creator><author>小米</author><pubDate>Fri, 27 May 2005 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/georgehill/articles/5272.html</guid><wfw:comment>http://www.blogjava.net/georgehill/comments/5272.html</wfw:comment><comments>http://www.blogjava.net/georgehill/articles/5272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/georgehill/comments/commentRss/5272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/georgehill/services/trackbacks/5272.html</trackback:ping><description><![CDATA[<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00><FONT color=#ff0000><B>◆加入收藏夹<A name=jrscj></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>点击即可把你的网站添加到浏览器的收藏菜单下</TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;span style="CURSOR: hand" onClick="window.external.addFavorite('http://www.helpor.net','网页特效集锦')" title="网页特效集锦"&gt;收藏本站&lt;/span&gt; </TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆设为首页<A name=swsy></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>点击即可把你的网站设置为浏览器的起始页</TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;span onclick="var strHref=window.location.href;this.style.behavior='url(#default#homepage)';<BR>this.setHomePage('http://www.helpor.net');" style="CURSOR: hand"&gt;设为首页&lt;/span&gt; </TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆去掉超链接的下划线<A name=qdlj></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>有时候看着那超链接的下划线挺讨厌的，把下面这段代码放到网页源代码&lt;head&gt;与&lt;/head&gt;之间，下划线就无影无踪啦！ <BR>注意，网页的&lt;body&gt;标签里不能再有link之类的属性，否则本效果会失效！</TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;style TYPE="text/css"&gt;<BR>&lt;!--<BR>A:link{text-decoration:none}<BR>A:visited{text-decoration:none}<BR>A:hover {color: #ff00ff;text-decoration:underline}<BR>--&gt;<BR>&lt;/style&gt; </TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆自动刷新网页<A name=zdsx></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>自动刷新网页 <BR>在HTML的与之间加入下面这段代码，则在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间，以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。 </TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;meta http-equiv="refresh" content="300; url=target.html"&gt; </TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆刷新本页<A name=sxby></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>点击即可刷新本页。 </TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;a href="javascript:location.reload()" target="_self"&gt;刷新&lt;/a&gt;</TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆返回到上一页<A name=fh></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>点击即可返回到上一页面。</TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;a href="javascript:history.back(-1)"&gt;返回上一页&lt;/a&gt;</TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆跳出小窗口<A name=tcck></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>在打开有下面这段代码的页面时将会跳出一个468x60大小的小窗口。“window.html”为跳出的小窗口里所要显示的网页。toolbar、status、menubar、scrollbars、设置小窗口的工具栏、状态栏、菜单栏及滚动条的有无，resizable设置是否可让浏览者改变小窗口大小，width、height设置小窗口的宽度以及高度。(不过这样的小窗口一般是不受欢迎的哦！) </TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;script language="JavaScript"&gt;<BR>window.open("window.html","www_helpor_net","toolbar=no, status=no,menubar=no, scrollbars=no,resizable=no,width=468,height=60,left=200,top=50");<BR>&lt;/script&gt;</TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆自动关闭窗口<A name=zdgb></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>在网页源代码中加入下面的代码，则该窗口将在20秒钟之后自动关闭！这与跳出式小窗口配合使用是再好不过啦！代码中“i=20”表示关闭的延迟时间为20秒，可任意修改。 </TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;script language="javascript"&gt;<BR>&lt;!--<BR>function clock(){i=i-1<BR>document.title="本窗口将在"+i+"秒后自动关闭!";<BR>if(i&gt;0)setTimeout("clock();",1000);<BR>else self.close();}<BR>var i=20<BR>clock();<BR>//--&gt;<BR>&lt;/script&gt;</TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆给页面加保护<A name=bh></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>如果你不想让辛辛苦苦做出来的东西被人轻易地Copy&amp;Paste走的话，不妨在HTML里加入下面这段代码。当在网页里按下鼠标右键时，出现的不是想要的快捷菜单而是一个警告窗口。“\n\n”表示换行。 </TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;script language="JavaScript"&gt;<BR>function helpor()<BR>{<BR>if (event.button==2)alert(' 仅供浏览!谢谢!\n\n若有问题请与我联系! ')<BR>}<BR>&lt;/script&gt;<BR><BR>然后把&lt;body&gt; 改为 &lt;body onmousedown="helpor_net()"&gt;</TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆固定字号大小<A name=gdzh></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>你是否有过这样的经历：一个布置得很好的网页，当浏览时把浏览器的字号设置成大或小时，漂亮的网页马上面目全非了。因为字的大小变了，版式自然乱了。现在好了，只要把下面这段代码加入到网页源文件的&lt;head&gt;与&lt;/head&gt;之间就行了(对用&lt;font&gt;标签定义的文字无效)。 </TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;style type="text/css"&gt;<BR>&lt;!--<BR>body {font-size:9pt}<BR>td {font-size:9pt}<BR>--&gt;<BR>&lt;/style&gt; </TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆状态栏里的动态欢迎语<A name=ztl></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>浏览器的状态栏里出现一个字接一个字往左跑的欢迎语！</TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;script language="JavaScript"&gt;<BR>&lt;!--<BR>function statusMessageObject(p,d) {<BR>this.msg = MESSAGE<BR>this.out = " "<BR>this.pos = POSITION<BR>this.delay = DELAY<BR>this.i = 0<BR>this.reset = clearMessage<BR>}<BR>function clearMessage() {<BR>this.pos = POSITION<BR>}<BR>var POSITION = 100<BR>var DELAY = 5<BR>var MESSAGE = "欢迎光临! Welcome to WWW.HELPOR.NET "<BR>var scroll = new statusMessageObject()<BR>function scroller() {<BR>for (scroll.i = 0; scroll.i &lt; scroll.pos; scroll.i++) {<BR>scroll.out += " "<BR>}<BR>if (scroll.pos &gt;= 0)<BR>scroll.out += scroll.msg<BR>else scroll.out = scroll.msg.substring(-scroll.pos,scroll.msg.length)<BR>window.status = scroll.out<BR>scroll.out = " "<BR>scroll.pos--<BR>if (scroll.pos &lt; -(scroll.msg.length)) {<BR>scroll.reset()<BR>}<BR>setTimeout ('scroller()',scroll.delay)<BR>}<BR>function snapIn(jumpSpaces,position) {<BR>var msg = scroll.msg<BR>var out = ""<BR>for (var i=0; i&lt;position; i++)<BR>{out += msg.charAt(i)}<BR>for (i=1;i&lt;jumpSpaces;i++)<BR>{out += " "}<BR>out += msg.charAt(position)<BR>window.status = out<BR>if (jumpSpaces &lt;= 1) {<BR>position++<BR>if (msg.charAt(position) == ' ')<BR>{position++ }<BR>jumpSpaces = 100-position<BR>} else if (jumpSpaces &gt; 3)<BR>{jumpSpaces *= .75}<BR>else<BR>{jumpSpaces--}<BR>if (position != msg.length) {<BR>var cmd = "snapIn(" + jumpSpaces + "," + position + ")";<BR>scrollID = window.setTimeout(cmd,scroll.delay);<BR>} else {<BR>window.status=""<BR>jumpSpaces=0<BR>position=0<BR>cmd = "snapIn(" + jumpSpaces + "," + position + ")";<BR>scrollID = window.setTimeout(cmd,scroll.delay);<BR>return false<BR>}<BR>return true<BR>}<BR>snapIn(100,0);<BR>// --&gt;<BR>&lt;/script&gt;</TD></TR></TBODY></TABLE><BR>
<TABLE class=font cellSpacing=1 cellPadding=0 width=566 bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#fae211>
<TD colSpan=2 height=22><FONT color=#ffff00>&nbsp;<FONT color=#ff0000><B>◆保护自己的页面不被别人放在框架中<A name=bhzj></A></B></FONT></FONT></TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>说 明</TD>
<TD bgColor=#fae211 height=22>有些人真是懒得可以，把别人做好的网页往自己网页的框架(Frame)里一放，别人的成果就变成了自己的，而且看不出该网页的真实地址！为了防止你的成果被这些人所剽窃，你就可以在你网页的HTML里加入下面这段代码，这样，你的网页便总是在整个窗口中打开了。 </TD></TR>
<TR>
<TD align=middle width=66 bgColor=#fae211 height=22>代 码</TD>
<TD bgColor=#fae211 height=22>&lt;Script LANGUAGE="JavaScript"&gt;<BR>if(self!=top){top.location=self.location;}<BR>&lt;/script&gt; </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/georgehill/aggbug/5272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/georgehill/" target="_blank">小米</a> 2005-05-27 16:46 <a href="http://www.blogjava.net/georgehill/articles/5272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>