<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky0.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/csdnblog" type="application/rss+xml" ref="self"></atom:link><fs:self_link href="http://feed.feedsky.com/csdnblog" type="application/rss+xml"></fs:self_link><lastBuildDate>Sat, 08 Dec 2007 19:55:00 GMT</lastBuildDate><title>CSDN Blog:all</title><description>CSDN Blog:all</description><link>http://blog.csdn.net/rsspages/0.xml</link><item><title>Div+CSS布局入门教程</title><link>http://blog.csdn.net/DL88250/archive/2007/12/09/1925362.aspx</link><wfw:comment>http://blog.csdn.net/DL88250/comments/1925362.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/DL88250/comments/commentRss/1925362.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/DL88250/services/trackbacks/1925362.aspx</trackback:ping><description>在网页制作中，有许多的术语，例如：CSS、HTML、DHTML、XHTML等等。在下面的文章中我们将会用到一些有关于HTML的基本知识，而 在你学习这篇入门教程之前，请确定你已经具有了一定的HTML基础。下面我们就开始一步一步使用DIV+CSS进行网页布局设计吧。
所有的设计第一步就是构思，构思好了，一般来说还需要用PhotoShop或FireWorks(以下简称PS或FW)等图片处理软件将需要制作的界面布局简单的构画出来，以下是我构思好的界面布局图。

下面，我们需要根据构思图来规划一下页面的布局，仔细分析一下该图，我们不难发现，图片大致分为以下几个部分：
　　1、顶部部分，其中又包括了LOGO、MENU和一幅Banner图片；　　2、内容部分又可分为侧边栏、主体内容；　　3、底部，包括一些版权信息。　　有了以上的分析，我们就可以很容易的布局了，我们设计层如下图:

根据上图，我再画了一个实际的页面布局图，说明一下层的嵌套关系，这样理解起来就会更简单了。

　　DIV结构如下：　　│body {}　/*这是一个HTML元素，具体我就不说明了*/　　└#Container {}　/*页面层容器*/　　　　　├#Header {}　/*页面头部*/　　　　　├#PageBody {}　/*页面主体*/　　　　　│　├#Sidebar {}　/*侧边栏*/　　　　　│　└#MainBody {}　/*主体内容*/　　　　　└#Footer {}　/*页面底部*/
至此，页面布局与规划已经完成，接下来我们要做的就是开始书写HTML代码和CSS。
接下来我们在桌面新建一个文件夹，命名为&amp;ldquo;DIV+CSS布局练习&amp;rdquo;，在文件夹下新建两个空的记事本文档，输入以下内容：

&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=gb2312&amp;quot; /&amp;gt;&amp;lt;title&amp;gt;无标题文档&amp;lt;/title&amp;gt;&amp;lt;link href=&amp;quot;css.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
这是XHTML的基本结构，将其命名为index.htm，另一个记事本文档则命名为css.css。
下面，我们在&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;标签对中写入DIV的基本结构，代码如下：
&amp;lt;div id=&amp;quot;container&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--页面层容器--&amp;gt;[/color]　　&amp;lt;div id=&amp;quot;Header&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--页面头部--&amp;gt;[/color]　　&amp;lt;/div&amp;gt;　　&amp;lt;div id=&amp;quot;PageBody&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--页面主体--&amp;gt;[/color]　　　　&amp;lt;div id=&amp;quot;Sidebar&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--侧边栏--&amp;gt;[/color]　　　　&amp;lt;/div&amp;gt;　　　　&amp;lt;div id=&amp;quot;MainBody&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--主体内容--&amp;gt;[/color]　　　　&amp;lt;/div&amp;gt;　　&amp;lt;/div&amp;gt;　　&amp;lt;div id=&amp;quot;Footer&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--页面底部--&amp;gt;[/color]　　&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
为了使以后阅读代码更简易，我们应该添加相关注释，接下来打开css.css文件，写入CSS信息，代码如下：

/*基本信息*/body {font:12px Tahoma;margin:0px;text-align:center;background:#FFF;}
/*页面层容器*/#container {width:100%}
/*页面头部*/#Header {width:800px;margin:0 auto;height:100px;background:#FFCC99}
/*页面主体*/#PageBody {width:800px;margin:0 auto;height:400px;background:#CCFF00}
/*页面底部*/#Footer {width:800px;margin:0 auto;height:50px;background:#00FFFF}
把以上文件保存，用浏览器打开，这时我们已经可以看到基础结构了，这个就是页面的框架了。
关于以上CSS的说明（详细请参考CSS2.0中文手册，网上有下载）：
1、请养成良好的注释习惯，这是非常重要的；
2、body是一个HTML元素，页面中所有的内容都应该写在这标签对之内，我就不多说了；
3、讲解一些常用的CSS代码的含义：
font:12px Tahoma；这里使用了缩写，完整的代码应该是：font-size:12px;font-family:Tahoma；说明字体为12像素大小，字体为Tahoma格式；
margin:0px；也使用了缩写，完整的应该是：
margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px或margin:0px 0px 0px 0px
顺序是 上 / 右 / 下 / 左，你也可以书写为margin:0(缩写)；以上样式说明body部分对上右下左边距为0像素，如果使用auto则是自动调整边距，
另外还有以下几种写法：margin:0px auto；说明上下边距为0px，左右为自动调整；我们以后将使用到的padding属性和margin有许多相似之处，他们的参数是一样的，只不过各自表示的含义不相同，margin是外部距离，而padding则是内部距离。
text-align:center文字对齐方式，可以设置为左、右、中，这里我将它设置为居中对齐。
background:#FFF设置背景色为白色，这里颜色使用了缩写，完整的应该是background:#FFFFFF。background可以用来给指定的层填充背景色、背景图片，以后我们将用到如下格式：background:#ccc url('bg.gif') top left no-repeat；表示：使用#CCC(灰度色)填充整个层，使用bg.gif做为背景图片，top left表示图片位于当前层的左上端，no-repeat表示仅显示图片大小而不填充满整个层。top/right/left/bottom/center用于定位背景图片，分别表示 上 / 右 / 下 / 左 / 中；还可以使用background:url('bg.gif') 20px 100px;表示X座标为20像素，Y座标为100像素的精确定位；repeat/no-repeat/repeat-x/repeat-y分别表示 填充满整个层 / 不填充 / 沿X轴填充 / 沿Y轴填充。
height / width / color 分别表示高度(px)、宽度(px)、字体颜色(HTML色系表)。
4、如何使页面居中？
大家将代码保存后可以看到，整个页面是居中显示的，那么究竟是什么原因使得页面居中显示呢？是因为我们在#container中使用了以下属性：margin:0 auto;按照前面的说明，可以知道，表示上下边距为0，左右为自动，因此该层就会自动居中了。如果要让页面居左，则取消掉auto值就可以了，因为默认就是居左显示的。通过margin:auto我们就可以轻易地使层自动居中了。
5、这里我只介绍这些常用的CSS属性了，其他的请参看CSS2.0中文手册。
当我们写好了页面大致的DIV结构后，我们就可以开始细致地对每一个部分进行制作了。
在上一章中我们写入了一些样式，那些样式是为了预览结构而写入的，我们把css.css中的样式全部清除掉，重新写入以下样式代码：

/*基本信息*/body {font:12px Tahoma;margin:0px;text-align:center;background:#FFF;}a:link,a:visited {font-size:12px;text-decoration:none;}a:hover{}
/*页面层容器*/#container {width:800px;margin:10px auto}
样式说明：
a:link,a:visited {font-size:12px;text-decoration:none;}a:hover {}
这两项分别是控制页面中超链接的样式，具体我就不说明了，请大家参阅手册。
#container {width:800px;margin:10px auto}
指定整个页面的显示区域。width:800px指定宽度为800像素，这里根据实际所需设定。margin:10px auto，则是页面上、下边距为10个像素，并且居中显示。上一章中我们讲过，对层的margin属性的左右边距设置为auto可以让层居中显示。
接下来，我们开始制作TOP部分，TOP部分包括了LOGO、菜单和Banner，首先我们要做的就是对设计好的图片进行切片，以下是在FW下完成的切片：

我将TOP部分切片为两部分，第一部分包括了LOGO和一条横线。由于LOGO图片并没有太多的颜色，这里我于是将这一部分保存为GIF格式，调色 板选择为精确，选择Alpha透明度，色版为白色(此处颜色应与背景色相同)，导出为logo.gif，图像宽度为800px。
到这里，有的朋友就说了，* 为什么要使用GIF格式？使用JPEG不是更好吗？因为GIF格式的图片文件更小，这样能使页面载入的速度更快，当然使用此格式之前必须确定图片并没有使用太多的颜色，当我们使用了GIF格式时，从肉眼上并不能看出图片有什么太大的变化，因此这是可行的。
* 接下来的Banner部分还能使用GIF格式吗？答案是不能，因为Banner部分是一个细致的图片，如果使用GIF格式颜色会有太大的损失，所以必须使用JPEG格式，将文件导出为banner.jpg。
* 合理的切片是非常之重要的，因为切片的方法正确与否决定了CSS书写的简易程度以及页面载入速度。
切好片后，我们还需要对TOP部分进行分析并将DIV结构写入Header中代码如下：
　　&amp;lt;div id=&amp;quot;menu&amp;quot;&amp;gt;　　　&amp;lt;ul&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;首页&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;博客&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;设计&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;相册&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;论坛&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;关于&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　&amp;lt;/ul&amp;gt;　　&amp;lt;/div&amp;gt;　　&amp;lt;div id=&amp;quot;banner&amp;quot;&amp;gt;　　&amp;lt;/div&amp;gt;
为什么要这么写呢，因为对菜单使用列表&amp;lt;li&amp;gt;形式，可以在以后方便对菜单定制样式。
而为什么要添加以下代码呢？&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;插入这一段代码是可以方便地对菜单选项之间插入一些分隔样式，例如预览图中的竖线分隔。
然后我们在css.css中再写入以下样式：
/*页面头部*/#header {background:url(logo.gif) no-repeat}
样式说明：#header {background:url(logo.gif) no-repeat}给页面头部分加入一个背景图片LOGO，并且不作填充。
这里，我们没有指定header层的高度，为什么不指定呢？
因为header层中还有菜单和banner项，所以层的高度暂时是未知的，而层的属性又可以让层根据内容自动设定调整，因此我们并不需要指定高度。
使用列表&amp;lt;li&amp;gt;制作菜单
开始此节的学习前，请确认你已经参照之前的几节内容写入了DIV、CSS到index.htm和css.css文件中。
这一节我将告诉大家如何用列表&amp;lt;li&amp;gt;来制作菜单。
&amp;nbsp;&amp;nbsp;&amp;lt;div id=&amp;quot;menu&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;首页&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;博客&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;设计&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;相册&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;论坛&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;关于&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;
以上是这部分的结构，有关于&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;、&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;这两个HTML元素大家自己去参考相关的内容吧，它们最主要的作用就是在HTML中以列表的形式来显示一些信息。
还有一点需要大家一定要分清楚的，当在HTML中定义为id=&amp;quot;divID&amp;quot;时，在CSS对应的设置语法则是#divID{} ，如果在HTML中定义为class=&amp;quot;divID&amp;quot;时，则在CSS中对应的设置语法是.divID。
如果id=&amp;quot;divID&amp;quot;这个层中包括了一个&amp;lt;img&amp;gt;&amp;lt;/img&amp;gt;，则这个img在CSS中对应的设置语法应该是#divID img {}，同样，如果是包含在class=&amp;quot;divID&amp;quot;这个层中时，则设置语法应该是.divID img {}，这一点希望大家要分清楚了。
另外，HTML中的一切元素都是可以定义的，例如table、tr、td、th、form、img、input...等等，如果你要在CSS中设置它们，则直接写入元素的名称加上一对大括号{}就可以了。所有的CSS代码都应该写在大括号{}中。
按照上面的介绍，我们先在css.css中写入以下代码：
#menu ul {list-style:none;margin:0px;}#menu ul li {float:left;}
解释一下：
#menu ul {list-style:none;margin:0px;}list-style:none，这一句是取消列表前点，因为我们不需要这些点。margin:0px，这一句是删除UL的缩进，这样做可以使所有的列表内容都不缩进。
#menu ul li {float:left;}这里的 float:left 的左右是让内容都在同一行显示，因此使用了浮动属性(float)。
到这一步，建议大家先保存预览一下效果，我们再添加下面的内容，效果如下：

这时，列表内容是排列在一行，我们在#menu ul li {}再加入代码margin:0 10px
#menu ul {list-style:none;margin:0px;}#menu ul li {float:left;margin:0 10px}
margin:0 10px的作用就是让列表内容之间产生一个20像素的距离(左：10px，右：10px)，预览的效果如下：

现在，雏形已经出来了，我们再来固定菜单的位置，把代码改成如下：
#menu {padding:20px 20px 0 0}/*利用padding:20px 20px 0 0来固定菜单位置*/#menu ul {float:right;list-style:none;margin:0px;}/*添加了float:right使得菜单位于页面右侧*/#menu ul li {float:left;margin:0 10px}
这时，位置已经确定了，可是构思图中，菜单选项之间还有一条竖线，怎么办呢？别忘了，我们早就已经留好了一个空的&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;，要想加入竖线就使用它了。按照上面说的方法，我们再添加以下代码：
.menuDiv {width:1px;height:28px;background:#999}
保存预览一下，竖线是否已经出来了？关于这段代码就不多讲了，应该是很容易理解的。

不过，菜单选项的文字却在顶部，我们再修改成以下代码：
#menu ul li {float:left;margin:0 10px;display:block;line-height:28px}
关于display:block;line-height:28px大家可以去参阅一下手册，我就不多讲了。
效果基本上已经实现了，剩下的就是修改菜单的超链接样式，在css.css中添加以下代码：
#menu ul li a:link,#menu ul li a:visited {font-weight:bold;color:#666}#menu ul li a:hover{}
这个也不多说了，没什么好说的了，最后的效果如下：


这一节到这里就完毕了，顺便把素材提供给大家：构思图：点击下载HTML和CSS源文件：点击下载

这一节里面，主要就是想告诉大家如何使用好border和clear这两个属性。
首先，如果你曾用过table制作网页，你就应该知道，如果要在表格中绘制一条虚线该如何做，那需要制作一个很小的图片来填充，其实我们还有更简单的办法，只要在&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;中加入这么一段就可以了，你可以试试：&amp;lt;div style=&amp;quot;border-bottom:1px dashed #ccc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
大家可以再次参考手册，然后你就能明白dashed、solid、dotted...等的作用，利用它们你可以制作出许多效果来，实线、虚线、双线、阴影线等等。
&amp;lt;div id=&amp;quot;banner&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
以上代码便可以实现设计草图中的banner，在css.css中加入以下样式：
#banner {&amp;nbsp;background:url(banner.jpg) 0 30px no-repeat; /*加入背景图片*/&amp;nbsp;width:730px; /*设定层的宽度*/&amp;nbsp;margin:auto; /*层居中*/&amp;nbsp;height:240px; /*设定高度*/&amp;nbsp;border-bottom:5px solid #EFEFEF; /*画一条浅灰色实线*/&amp;nbsp;clear:both /*清除浮动*/}
通过border很容易就绘制出一条实线了，并且减少了图片下载所占用的网络资源，使得页面载入速度变得更快。
另一个要说明的就是clear:both，表示清除左、右所有的浮动，在接下来的布局中我们还会用这个属性：clear:left/right。在这里添加clear:both是由于之前的ul、li元素设置了浮动，如果不清除则会影响banner层位置的设定。
&amp;lt;div id=&amp;quot;pagebody&amp;quot;&amp;gt;&amp;lt;!--页面主体--&amp;gt;&amp;nbsp;&amp;lt;div id=&amp;quot;sidebar&amp;quot;&amp;gt;&amp;lt;!--侧边栏--&amp;gt;&amp;nbsp;&amp;lt;/div&amp;gt;&amp;nbsp;&amp;lt;div id=&amp;quot;mainbody&amp;quot;&amp;gt;&amp;lt;!--主体内容--&amp;gt;&amp;nbsp;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
以上是页面主体部分，我们在css.css中添加以下样式：
#pagebody {&amp;nbsp;width:730px; /*设定宽度*/&amp;nbsp;margin:8px auto; /*居中*/}#sidebar {&amp;nbsp;width:160px; /*设定宽度*/&amp;nbsp;text-align:left; /*文字左对齐*/&amp;nbsp;float:left; /*浮动居左*/&amp;nbsp;clear:left; /*不允许左侧存在浮动*/&amp;nbsp;overflow:hidden; /*超出宽度部分隐藏*/}#mainbody {&amp;nbsp;width:570px;&amp;nbsp;text-align:left;&amp;nbsp;float:right; /*浮动居右*/&amp;nbsp;clear:right; /*不允许右侧存在浮动*/&amp;nbsp;overflow:hidden}
为了可以查看到效果，建议在#sidebar和#mainbody中加入以下代码，预览完成后可以删除这段代码：
border:1px solid #E00;height:200px
保存预览效果，可以发现这两个层完美的浮动，在达到了我们布局的要求，而两个层的实际宽度应该160+2(border)+570+2= 734px，已经超出了父层的宽度，由于clear的原因，这两个层才不会出现错位的情况，这样可以使我们布局的页面不会因为内容太长（例如图片）而导致 错位。

而之后添加的overflow:hidden则可以使内容太长（例如图片）的部份自动被隐藏。通常我们会看到一些网页在载入时，由于图片太大，导致布局被撑开，直到页面下载完成才恢复正常，通过添加overflow:hidden就可以解决这个问题。
CSS中每一个属性运用得当，就可以解决许多问题，或许它们与你在布局的页并没有太大的关系，但是你必须知道这些属性的作用，在遇到难题的时候，可以尝试使用这些属性去解决问题。
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 03:55:00 +0800</pubDate><author>88250</author><comments>http://blog.csdn.net/DL88250/archive/2007/12/09/1925362.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/DL88250/archive/2007/12/09/1925362.aspx</guid><dc:creator>88250</dc:creator><fs:srclink>http://blog.csdn.net/DL88250/archive/2007/12/09/1925362.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579903/1235704</fs:itemid></item><item><title>Asp.Net Ajax 学习笔记9 JavaScript的原生类型以及Microsoft AJAX Library的相关扩展(上)</title><link>http://blog.csdn.net/firewolffeng/archive/2007/12/09/1925361.aspx</link><wfw:comment>http://blog.csdn.net/firewolffeng/comments/1925361.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/firewolffeng/comments/commentRss/1925361.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/firewolffeng/services/trackbacks/1925361.aspx</trackback:ping><description>1、Object原生类型

    &amp;nbsp;它是一个无序的集合，可以存放任意对象类型 
    可以作为字典使用。 
    可以使用for-in遍历字典的中的每一项 
    不允许扩展它prototype对象，影响面太广。就像在C#中的Object类型，如果可扩展其公开方法，那么所有的类型都被扩展了。 
    Asp.Net Ajax没有扩展Object类型 
    Object的prototype
    
        
            
                toString()/toLocaleString()
                得到表示当前对象与环境无/有关的字符串
            
            
                valueOf()
                返回表示该对象的value（大部分类型会覆盖这个方法）
            
            
                hasOwnProperty(propertyName)
                对象上是否直接定义了某个属性
            
            
                isPrototypeOf(obj)
                obj是不是当前对象的prototype对象
            
            
                propertyIsEnumerable(propertyName)
                某属性是否可遍历
            
        
    
    

&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;

//使用new来实例一个Object对象，也可以用JSon字符串来实例化//一个Obejct对象var&amp;nbsp;o&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Object();&amp;nbsp;//&amp;nbsp;{};&amp;nbsp;{name&amp;nbsp;:&amp;nbsp;&amp;quot;Jeffrey&amp;quot;}//通过字典方式给Object类型的对象属性赋值o[&amp;quot;name&amp;quot;]&amp;nbsp;=&amp;nbsp;&amp;quot;Jeffrey&amp;quot;;//也可以直接给Object类型的对象属性赋值o.salary&amp;nbsp;=&amp;nbsp;1000;

&amp;nbsp;

var&amp;nbsp;dict&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Object();for&amp;nbsp;(var&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;10;&amp;nbsp;i++)...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;key&amp;nbsp;=&amp;nbsp;&amp;quot;key_&amp;quot;&amp;nbsp;+&amp;nbsp;i;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dict[key]&amp;nbsp;=&amp;nbsp;Math.random();}//使用delete删除Object类型对象中的字段//有点类似与c++中的删除内存的语法&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete&amp;nbsp;dict[&amp;quot;key_5&amp;quot;];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//使用for-in循环来遍历Object类型对象中的字段或属性for&amp;nbsp;(var&amp;nbsp;key&amp;nbsp;in&amp;nbsp;dict)...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;Key:&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;key&amp;nbsp;+&amp;nbsp;&amp;quot;,&amp;nbsp;Value&amp;nbsp;+&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;dict[key]);}

2、Array原生类型

    长度可变数组对象，最大长度2^32&amp;minus;1 = 4294967295 
    构造此对象时可不指定大小/指定大小，也可以带Array里对象值构造，也就是说可以直接将Array里的元素作为参数构造，那么元素直接赋值到Array里 
    Array的prototype
    
        
            
                length属性
                数组长度，可读写
            
            
                concat([ item1 [ , item2 [ , &amp;hellip; ] ] ])
                返回一个新数组，保存了原数组所有元素和所有的参数
            
            
                push([ item1 [ , item2 [ , &amp;hellip; ] ] ])
                在数组尾添加一个或多个元素
            
            
                pop()
                obj是不是当前对象的prototype对象
            
            
                shift()
                从数组头去除并返回元素
            
            
                unshift([ item1 [ , item2 [ , &amp;hellip; ] ] ])
                在数组头添加一个或多个元素
            
            
                join(separator)
                返回以separator作为分割符得到一个连接所有元素的的字符串
            
            
                reverse()
                将数组内所有元素逆转
            
            
                sort(compareFunction)
                
                参数为一个方法，用于比较两个元素,有两个参数。,比较函数的逻辑是：如果两参数的比较值小于0，则表示a必须出现在b前面，否则在b后面省略了参数则直接使用&amp;lt;, ==, &amp;gt;比较两个元素
                
            
            
                slice(start, end)
                返回新数组，不影响旧数组包含从下标start开始到下标end-1的元素如果省略end则包含从下标start开始至末尾的所有元素如果参数为负数，则表示数组的&amp;ldquo;倒数&amp;rdquo;第几个下标（即下标为n + array.length）如果start元素在end元素之后或相同，则返回空数组
            
            
                splice (start, deleteCount [ , item1 [ , item2 [ , &amp;hellip; ] ] ] )
                最灵活的方法，影响当前数组从下标start的元素开始，删除deleteCount个元素，并在当前start位置开始插入剩余元素删除元素：splice(2, 1)插入元素：splice(2, 0, &amp;quot;Hello&amp;quot;, &amp;quot;World&amp;quot;)替换元素：splice(2, 1, &amp;ldquo;Hello&amp;rdquo;, &amp;ldquo;World&amp;rdquo;)
            
        
    
    

&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
注：push、pop、shift三个方法组合使用能实现栈和队列。
3、Array原生类型的扩展

    
        
            Array.enqueue
            入队列操作，将item添加至array末尾
        
        
            Array.dequeue(array)
            出队列操作，返回并删除array的第一个元素
        
        
            Array.addRange(array, items)
            将items数组中所有元素添加至array末尾
        
        
            Array.contains(array, item)
            如果array中包含item元素，则返回true，否则返回false
        
        
            Array.clear(array)
            清除array中的所有元素
        
        
            Array.insert(array, index, item)
            将item插入至array中下标为index的位置
        
        
            Array.remove(array, item)
            从array中移除item元素
        
        
            Array.removeAt(array, index)
            从array中移除下标为index的元素
        
        
            Array.clone(array)
            
            返回一个与array相同的新数组
            
        
        
            Array.parse(value)
            将表示数组的JSON字符串变为一个数组对象
        
        
            Array.indexOf(array, item, start)
            获得item在array中的下标，从下标为start开始查找。如果array中没有item元素，那么返回-1
        
        
            Array.add(array, item)
            将item添加至array末尾，它和Array.enqueue其实是同一个函数
        
        
            Array.forEach(array, method, instance)
            以instance为上下文this引用，将array中的每个元素依次作为参数，循环调用method方法
        
    


&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;

&amp;lt;script&amp;nbsp;language=&amp;quot;javascript&amp;quot;&amp;nbsp;type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//elt每次调用此函数的Array里的元素&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//index每次调用此函数Array里元素的索引&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//array用来调用此函数的array&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;method(elt,&amp;nbsp;index,&amp;nbsp;array)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.result&amp;nbsp;+=&amp;nbsp;&amp;quot;[&amp;quot;&amp;nbsp;+&amp;nbsp;index&amp;nbsp;+&amp;nbsp;&amp;quot;.&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;elt&amp;nbsp;+&amp;nbsp;&amp;quot;]&amp;nbsp;&amp;quot;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;items&amp;nbsp;=&amp;nbsp;&amp;quot;I&amp;nbsp;am&amp;nbsp;Jeffrey&amp;nbsp;Zhao&amp;quot;.split(&amp;quot;&amp;nbsp;&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//使用JSon字符串来构造对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;...{result&amp;nbsp;:&amp;nbsp;&amp;quot;&amp;quot;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//obj作为用来接收函数调用上下文引用&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Array.forEach(items,&amp;nbsp;method,&amp;nbsp;obj);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(obj.result);&amp;lt;/script&amp;gt;

4、Error原生类型

    表示错误对象，如EvalError, URIError, RangeError 
    捕获或抛出错误try { &amp;hellip;throw new Error(&amp;hellip;) } catch(e) { &amp;hellip; } 
    Error对象IE和FireFox公有属性，message 
    IE拥有的特定属性：description：同message属性。number：错误编号，只有脚本引擎抛出的错误才有该属性 
    FireFox拥有的特定属性：fileName：创建错误的文件。lineNumber：创建错误对象的行号。stack：创建错误时的堆栈信息 

5、Error原生类型的扩展


    
        
            Error.create(message, errorInfo)
            创建新的Error对象将Error对象的错误信息属性设为message将errorInfo上的信息附加到Error对象
        
        
            Error.prototype.popStackFrame()
            为Error对象整理出更优雅直观的信息（lineNumber, stack）对于IE无效如果一个方法仅仅是返回Error对象而不是抛出对象，则在返回前应该调用该方法
        
    


&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
6、Function原生类型

    与Array，String等类型处于同等地位 
    每个方法均为Function类型的实例。例：typeof(Array) == typeof(Function) == &amp;ldquo;function&amp;rdquo; 
    方法调用时根据发起的对象来确定this上下文引用 
    Function.prototype.apply(instance, args) 
    Function.prototype.call(instance, [ arg1 [ , arg2 [ , &amp;hellip; ] ] ])
    
    &amp;lt;script&amp;nbsp;language=&amp;quot;javascript&amp;quot;&amp;nbsp;type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;display(text)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById(&amp;quot;info&amp;quot;).innerHTML&amp;nbsp;+=&amp;nbsp;(text&amp;nbsp;+&amp;nbsp;&amp;quot;&amp;lt;br&amp;nbsp;/&amp;gt;&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;aMethod()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;result&amp;nbsp;=&amp;nbsp;this.toString();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(var&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;arguments.length;&amp;nbsp;i++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;+=&amp;nbsp;(&amp;quot;,&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;arguments[i]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;result;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;a&amp;nbsp;=&amp;nbsp;new&amp;nbsp;String(&amp;quot;I&amp;nbsp;am&amp;nbsp;string&amp;nbsp;A&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;b&amp;nbsp;=&amp;nbsp;new&amp;nbsp;String(&amp;quot;I&amp;nbsp;am&amp;nbsp;string&amp;nbsp;B&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a.aMethod&amp;nbsp;=&amp;nbsp;b.aMethod&amp;nbsp;=&amp;nbsp;aMethod;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;aMethod():&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;aMethod());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;a.aMethod():&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;a.aMethod());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;b.aMethod():&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;b.aMethod());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;a.aMethod.call(b,&amp;nbsp;1,&amp;nbsp;2,&amp;nbsp;3):&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;a.aMethod.call(b,&amp;nbsp;1,&amp;nbsp;2,&amp;nbsp;3));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;b.aMethod.apply(a,&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]):&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;b.aMethod.apply(a,&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]));&amp;lt;/script&amp;gt;
    
    以上代码用a.aMethod.call方法调用b，那么a.aMethod的this上下文就是b，使用this就是在使用b对象，b.aMethod.apply也相同，a是this上下文。call和apply的区别在于，call使用不定参数，apply使用数组也就是Array参数 

7、Function原生类型扩展


    
        
            Function.createDelegate(instance, method)
            得到一个方法引用，执行它时则会调用method方法，并且保证method方法的上下文this引用为instance
        
        
            Function.createCallback(method, context)
            得到一个方法引用，执行它时则会调用method方法，并将context作为额外的参数传入
        
    


&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;

&amp;lt;script&amp;nbsp;language=&amp;quot;javascript&amp;quot;&amp;nbsp;type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//定义obj对象的属性。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text&amp;nbsp;:&amp;nbsp;&amp;quot;Hello&amp;quot;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//定义obj对象的onClick事件，并加上事件处理器&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onClick&amp;nbsp;:&amp;nbsp;function(e,&amp;nbsp;arg)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(this.text&amp;nbsp;+&amp;nbsp;&amp;quot;&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;arg);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//创建一个obj.onClick的方法引用，obj为这个方法的this上下文&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;delegate&amp;nbsp;=&amp;nbsp;Function.createDelegate(obj,&amp;nbsp;obj.onClick);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//创建一个obj.onClick的方法引用的引用，将&amp;quot;World&amp;quot;作为额外的arg参数&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;onClickCallback&amp;nbsp;=&amp;nbsp;Function.createCallback(delegate,&amp;nbsp;&amp;quot;World&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//为DOM元素添加某一事件的处理函数，事件名称应去掉&amp;ldquo;on&amp;rdquo;前缀。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //$addHandler是缩写，完整写法应该是Sys.UI.DomEvent.addHandler
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //使用$addHandler方法添加事件处理器，那么自动将事件对象click作为参数e传入了事件处理器&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $addHandler($get(&amp;quot;btn&amp;quot;),&amp;nbsp;&amp;quot;click&amp;quot;,&amp;nbsp;onClickCallback);&amp;lt;/script&amp;gt;

此处为什么要联合使用createDelegate和createCallback方法，因为在obj.onClick方法中，用到了this上下文和附加arg。
附：
Event对象的属性

    altKey：判断触发事件时Alt键是否被按下。 
    button：得到触发事件的鼠标按键。可选值为Sys.UI.MouseButton枚举（leftButton、middleButton和rightButton）。 
    charCode：得到触发事件时的键盘按键代码。可以为Sys.UI.Key枚举（backspace, tab, enter,esc, space, pageUp, pageDown, end, home, left, up, right, down, del）。 
    clientX：鼠标指针相对于文档可见区域的X坐标。 
    clientY：鼠标指针相对于文档可见区域的Y坐标。 
    ctrlKey：判断触发事件时Ctrl键是否被按下。 
    offsetX：鼠标指针相对于触发事件元素左侧边缘的偏移位置。 
    offsetY：鼠标指针相对于触发事件元素上边缘的偏移位置。 
    rawEvent：原始的DOM事件。 
    screenX：鼠标指针相对于浏览者屏幕的X坐标。 
    screenY：鼠标指针相对于浏览者屏幕的Y坐标。 
    shiftKey：判断触发事件时Shift键是否被按下。 
    target：触发事件的对象。 
    type：事件名称（例如&amp;ldquo;click&amp;rdquo;）。</description><pubDate>Sun, 09 Dec 2007 03:54:00 +0800</pubDate><author>firewolffeng</author><comments>http://blog.csdn.net/firewolffeng/archive/2007/12/09/1925361.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/firewolffeng/archive/2007/12/09/1925361.aspx</guid><dc:creator>firewolffeng</dc:creator><fs:srclink>http://blog.csdn.net/firewolffeng/archive/2007/12/09/1925361.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579905/1235704</fs:itemid></item><item><title>Vista部署的一些收集</title><link>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925360.aspx</link><wfw:comment>http://blog.csdn.net/hapeacock/comments/1925360.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/hapeacock/comments/commentRss/1925360.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/hapeacock/services/trackbacks/1925360.aspx</trackback:ping><description>目录：
步骤：

    从源安装DVD中提取原始安装包提取Lenovo 和 IBM 安装映像到Install.wim文件中，h:盘为Vista 20 合 1安装盘，lenovo映像的序列号为1，IBM为2Lenovo：imagex /export h:\sources\install.wim&amp;nbsp;1 d:\vistainstall\Vista\Install.wim &amp;quot;Vista Ultimate Lenovo&amp;quot;&amp;nbsp;IBM：imagex /export h:\sources\install.wim&amp;nbsp;2 d:\vistainstall\Vista\Install.wim &amp;quot;Vista Ultimate IBM&amp;quot; 
    

Vista备份的最佳实践

    备份只能用命令行工具Imagex，建立cmd脚本。在脚本运行时输入映像名称备注等
    还原用自动应答文件指定安装源地址，指向备份目录

&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
一、Imagex

    从已有多个映像的wim文件中导出指定映像到新的wim文件中，如果目标wim文件存在则将导出的映像集成到目标wim文件中


命令行：imagex /export e:\back.wim 1 e:\32 位元零售版\sources\install.wim &amp;quot;64 位元免刷激活旗鑑版備份&amp;quot;
将e:\back.wim文件中的第1个映像导出并集成到e:\32 位元零售版\sources\install.wim文件中，将映像命名为&amp;quot;64 位元免刷激活旗鑑版備份&amp;quot;


    从 ASUS 恢复盘提取 ASUS Oem Vista Ultimate 版到指定目录中


命令行：imagex /apply X:\asus.swm 4 /ref X:\*.swm Y:\ASUS /check /verify
命令及参数说明：将映像应用于指定的目录（也可以是驱动器）。本例中指将 X 盘的 asus.swm 文件中标识为 4 （Ultimate 版标识为4）的副本应用于 Y 盘的 ASUS 目录，应用之后 ASUS 目录被隐藏。/apply [image_file image_number | image_name image_path] image_file 映像文件名 image_number 映像文件中副本的编号 image_path 映像路径/ref splitwim.swm 引用拆分的 .wim 文件(SWM)。splitwim.swm 是其他拆分文件的名称和位置，可以使用通配符。本例中指 X 盘的所有.swm 文件（*.swm文件）。/check 检查 .wim 文件的完整性。/verify 检查错误和文件重复进行文件资源验证。


    从应用于指定目录的映像中重新捕获可安装的 Install.wim 文件 


命令行：imagex /compress fast /flags &amp;quot;Ultimate&amp;quot; /check /scroll /capture Y:\ASUS Y:\Install.wim &amp;quot;Asus Vista Ultimate&amp;quot;
命令及参数说明：将应用于指定目录的映像重新捕获，并使之成为可安装的 Install.wim 文件。本例中指将应用于 Y 盘 ASUS 目录中的&amp;ldquo;Ultimate&amp;rdquo;版文件重新捕获为可安装的 install.wim 文件。并标识为 &amp;quot;Asus Vista Ultimate&amp;quot; 。/compress [maximum | fast | none] 指定最初的捕获操作使用的压缩类型。maximum 最大值，提供了最佳压缩效果，捕获映像所用的时间最长。fast 快速，是默认压缩类型。较快的映像压缩效果，生成的文件比使用最大值要大。none 无压缩捕获映像。/flags &amp;quot;EditionID&amp;quot; 指定要捕获映像的版本。因为要重新部署为可安装的 Install.wim，所以 /flags 值是必须使用的并且必须使用引号加入有效的 EditionID 值。有效的 EditionID 值包括：HomeBasic HomePremium Starter Ultimate Business Enterprise ServerDatacenter ServerEnterprise ServerStandard/check 检查 .wim 文件的完整性。/scroll 滚动输出进行重定向。/capture image_path image_file image_path 映像路径 image_file 映像文件名 捕获到的新映像文件的名称及路径。


    Vista_Ultimate备份imagex /compress fast /flags &amp;quot;ULTIMATE&amp;quot; /check /scroll /capture c: d:\install.wim &amp;quot;Vista_Ultimate备份&amp;quot;，用imagex /info d:\vista\sources\install.wim 的命令查看install.wim 有Vista_Ultimate的备份，其ID为&amp;ldquo;2&amp;rdquo;；于是我格式化C盘后，进入安装程序，在安装选项中看到了Vista_Ultimate备份，选择这项Vista_Ultimate安装成功了。
    排除文件使用任意文本编辑器（例如记事本）创建名为 wimscript.ini 的配置文件。内容如下：[ExclusionList]ntfs.loghiberfil.syspagefile.sys&amp;quot;System Volume Information&amp;quot;RECYCLERWindows\CSC


[CompressionExclusionList]*.mp3*.zip*.cab\WINDOWS\inf\*.pnf


    将安装好驱动、应用程序做成Vista安装光盘


1. apply 類似 ghost2. append 是 apply 的逆向動作; 等於把備份 ghost 到安裝盤裏. 既是 ghost, 當然無法安裝! (讓廠商作更新用)3. capture 也是 apply 的逆向動作, 但它有二種不同作法:一. 和 append 一樣二. 加上 flags 變成可任意安裝 (不過很奇特的, 如果用 apply 的話卻只能 ghost 回原始處, 否則路徑不同會導致安裝失敗)4. 把不同版本集成一起會用到優化, 也就是相同的文件只複製一份. 所以您的備份系統如果裝有很多程式, 比方說一共 4 GB, 那麼 append 之後, 安裝盤體積變成2.5 GB + 4 GB (+ 休眠 + pagefile.sys + $Recycle.Bin + TEMP + System Volume Information).... 非瞠目結舌不行. 總之, 除非您先控制程式容量, 並且手動刪除上述垃圾檔, 否則 append 絕對不適合您.5. 這麼辦吧. 在 D:\VISTA 執行 D:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown, 然後重新開機回到 C:\XP. 下指令 imagex /compress fast (或 Maximum) /flags &amp;quot;ULTIMATE&amp;quot; /check /scroll /capture d: e:\back.wim &amp;quot;我的最愛備份&amp;quot; &amp;quot;愛人生日紀念版&amp;quot;, 再下指令集成到零售版去: imagex /export e:\back.wim 1 e:\install.wim &amp;quot;我的最愛備份&amp;quot;叮嚀二聲: 1.D:\Vista 所安裝程序如果非 &amp;quot;為所有者&amp;quot; 安裝則通過封裝再安裝後程序是在系統裏, 可是不會出現出來喔.2. /flags 之後的 &amp;quot;版本 ID&amp;quot; 請務必自行視實際版本書寫, 否則又是 GHOST (沒有可用系統, 不能安裝, 只能 apply 回原始分區) !!! 

sysprep 

    在參照電腦上安裝 Windows。 
    在安裝完成後，重新開機並安裝任何其他裝置驅動程式或應用程式。 
    更新 Windows 安裝之後，請執行 sysprep /oobe /generalize。/generalize 選項會指示 Sysprep 從 Windows 安裝移除系統特定的資料。系統特定資訊包括事件記錄、唯一的安全性識別元 (SID) 以及其他唯一的資訊。在移除唯一的系統資訊後，就會關閉電腦。/oobe 選項會指示 Windows 安裝在下次電腦開機時執行 Windows 歡迎畫面。 
    在電腦關機後，您可以開機成 Windows PE 或電腦上的另一個作業系統。 
    接著使用 ImageX 來擷取 Windows 安裝以建立參照映像，供使用相同硬體設定的電腦來安裝。


imagex /compress fast /check /flags &amp;quot;Ultimate&amp;quot; /scroll /capture c: c:\myimage.wim &amp;quot; Vista Ultimate&amp;quot; &amp;quot;My Custom Vista Image 1&amp;quot;

sysprep所在目录：&amp;ldquo;C:\windows\system32\sysprep\sysprep.exe&amp;rdquo; 
安装应用程序时要选择&amp;ldquo;所有人使用&amp;rdquo;，不然新建用户后没有快捷方式

WinPE

    Shell在windows\system32 下面写一个Winpeshl.ini，内容如下[LaunchApp]AppPath = %SYSTEMDRIVE%\myshell.exe
    自定义桌面背景在mount\windows\system32\中保存一个名为 winpe.bmp 的bmp图像即可。
    创建可启动 UFD在运行 Windows Vista 操作系统或 Windows PE 会话过程中，插入 UFD 设备。在命令提示符下，使用 Diskpart 将设备格式化为跨越整个设备的 FAT32，然后将此分区设置为活动状态。例如，diskpart select disk 1 clean create partition primary size=&amp;lt;size of device&amp;gt; select partition 1 active format fs=fat32 assign exit其中，disk 1 的值等于 UFD。在计算机上，将 \ISO 目录中的所有内容复制到 UFD 设备中。可以手动创建目录结构或使用 xcopy 命令自动构建相应的文件并将其从技术人员计算机复制到 UFD 设备中。例如，xcopy c:\winpe\iso\*.* /s /e /f f:\其中，c: 是指计算机的硬盘，f: 是指 UFD 设备。
    创建可启动 CD-ROM在技术人员计算机上，在提示符下，使用 Oscdimg 创建 .iso 文件。例如，oscdimg -n -bc:\winpe\etfsboot.com c:\winpe\ISO c:\winpe\winpe.iso对于 ia64 体系结构，使用 efisys.bin 替换 etfsboot.com。将映像 (Winpe.iso) 刻录到 CD-ROM。
    生成单击&amp;ldquo;开始&amp;rdquo;，依次指向&amp;ldquo;所有程序&amp;rdquo;、&amp;ldquo;Windows OPK&amp;rdquo;或&amp;ldquo;Windows AIK&amp;rdquo;，然后单击&amp;ldquo;Windows PE 工具命令提示符&amp;rdquo;copype.cmd x86 d:\winpe添加其他程序包通过使用 Peimg 工具，您将使用 /install 选项来安装 Windows 功能。Windows 功能包括在基本映像 (Winpe.wim) 中，但未安装。也可以导入程序包并添加驱动程序和语言包。使用 peimg /install 命令将 Windows 功能添加到基本映像中。例如，peimg /install=&amp;lt;pkg&amp;gt; c:\winpe\mount\Windows其中，&amp;lt;pkg&amp;gt; 表示程序包名称。使用 /list 命令可以获得可用程序包及其名称的列表。指定程序包名称时可以使用通配符。将安装与名称匹配的所有程序包。例如，peimg /install=WinPE-HTA-Package c:\winpe\mount\Windows或 peimg /install=*winpe* c:\winpe\mount\Windows其中，通配符表示程序包名称中含有 winpe 的任何程序包。通过使用 peimg /list 命令查看当前映像中的所有程序包，验证这些程序包是否已安装。例如，peimg /list c:\winpe\mount\Windows在 INS 列中，(+) 表示已安装的程序包，(-) 则表示未安装的程序包。
    输入法以微软五笔86为例，我们仔细分析了一下，它共需要winwb86.IME、winwb86.MB和输入法指示器internat.exe(借用2000的)，我们把这些文件放到system32里面，然后把五笔的注册表信息+进去，最后启动internat.exe，为此我们编写了一个批处理来完成(这里先假设3个文件已经手工加进去了)reg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804reg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804 /v IME file /t REG_SZ /d winwb86.imereg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804 /v Layout file /t REG_SZ /d kbdus.dllreg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804 /v Layout Text /t REG_SZ /d 王码五笔型输入法86版%systemroot%\system32\internat.exe于是我们熟悉的输入法指示器出来了
    另外的有:全拼&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;键: E0010804 输入法文件:winpy.ime双拼&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E0020804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;winsp.ime郑码&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E0030804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;winzm.ime智能ABC&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E0040804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;winabc.ime国标&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E0050804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;wingb.ime微软拼音&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E00E0804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;pintlgnt.ime五笔86&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; E0100804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; winwb86.ime其他的就不提了(有些输入法不仅仅只有一个ime文件，记得拷全了)也谈谈PE输入法，以加载微软五笔86为例
    

Vista

    启动在Windows&amp;nbsp;2000/XP/2003&amp;nbsp;启动过程是这样的POST&amp;nbsp;(系统自检)-&amp;gt;BIOS读取MBR-&amp;gt;找到硬盘分区表中Active的分区-&amp;gt;读取Boot&amp;nbsp;Sector.-&amp;gt;&amp;nbsp;加载Boot&amp;nbsp;code.-&amp;gt;&amp;nbsp;加载NTLDRWindows&amp;nbsp;Vista&amp;nbsp;引入了Boot&amp;nbsp;Manager的概念和BCD的概念.&amp;nbsp;POST&amp;nbsp;(系统自检)-&amp;gt;BIOS读取MBR-&amp;gt;找到硬盘分区表中Active的分区-&amp;gt;读取Boot&amp;nbsp;Sector-&amp;gt;&amp;nbsp;加载BOOTMGR&amp;nbsp;(Boot&amp;nbsp;Manager).&amp;nbsp;Boot&amp;nbsp;Manager&amp;nbsp;读取BCD信息然后列出启动菜单-如果Windows&amp;nbsp;Vista&amp;nbsp;被选中的话.&amp;nbsp;BOOTMGR将控制权交给Winload.exe&amp;nbsp;然后启动系统.&amp;nbsp;并开始核心加载-如果是XP/2000/2003被选中的话,&amp;nbsp;BOOTMGR将控制权交给NTLDR,&amp;nbsp;然后开始普通的Windows&amp;nbsp;加载.
    bootsect.exe这个命令的用途是这样的.(假设在Windows&amp;nbsp;Vista之后我们安装了Windows&amp;nbsp;XP)1.&amp;nbsp;首先启动到Windows&amp;nbsp;XP下,&amp;nbsp;运行bootsect.exe&amp;nbsp;/NT60&amp;nbsp;启用BootMGR.2.&amp;nbsp;在BCD&amp;nbsp;Store下创建一个Windows&amp;nbsp;XP的StoreBcdedit&amp;nbsp;-create&amp;nbsp;ntldr&amp;nbsp;-d&amp;quot;Windows&amp;nbsp;XP&amp;quot;3.&amp;nbsp;将store&amp;nbsp;加入启动菜单&amp;nbsp;(因为Vista&amp;nbsp;不知道Windows&amp;nbsp;XP的存在)bcdedit&amp;nbsp;-set&amp;nbsp;ntldr&amp;nbsp;path\ntldrbcdedit&amp;nbsp;/displayorder&amp;nbsp;ntldr&amp;nbsp;/addastpath是NTLDR所在的路径然后启动就可以选择多系统的
    Bcdedit 命令不完全解析实现PE2.0与Vista安装盘双引导的方法
    工具：VISTA MSDN原版光盘，VISTA AIK平台：XP PRO SP2步骤：一、准备工作1、从VISTA系统中提取bcdedit.exe、bootmgr.exe.mui、memtest.exe.mui到E盘根目录下2、定制WinPE.wim在命令提示符下执行下列命令QUOTE:c:cd &amp;quot;C:\Program Files\Windows AIK\Tools\PETools\&amp;quot;copype.cmd x86 e:\peimagex /apply e:\pe\winpe.wim 1 e:\pe\mountcopy &amp;quot;c:\program files\Windows AIK\Tools\x86\imagex.exe&amp;quot; e:\pe\mount\Windows\System32copy e:\bcdedit.exe e:\pe\mount\Windows\System32peimg /prep e:\pe\mount\Windows输入yes继续执行imagex /unmount /commit e:\pe\mountcopy e:\pe\winpe.wim e:\winpe.wim二、修改光盘引导菜单1、用UltraISO打开VISTA MSDN原版光盘，提取boot目录的bcd（无扩展名）到E盘2、在命令提示符下执行下列命令QUOTE:e:ren bcd tmpbcdedit /import tmp bcdeditbcdedit /timeout 15bcdedit /set {bootmgr} locale zh-CNbcdedit /set {default} locale zh-CNbcdedit /set {memdiag} locale zh-CNbcdedit /set {default} description &amp;quot;安装 Vista ULTIMATE&amp;quot;bcdedit /copy {default} /d &amp;quot;启动 Windows PE 2.0&amp;quot;执行完毕后，会返回下列信息The entry was successfully copied to {6eb5d89a-0822-11dc-89f2-005056c00008}注意：{6eb5d89a-0822-11dc-89f2-005056c00008}是由系统随机生成的菜单ID标识，不同机子可能会不相同。继续执行下列命令：QUOTE:bcdedit /set {6eb5d89a-0822-11dc-89f2-005056c00008} device ramdisk=[boot]\boot\winpe.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}bcdedit /set {6eb5d89a-0822-11dc-89f2-005056c00008} osdevice ramdisk=[boot]\boot\winpe.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}bcdedit /displayorder {6eb5d89a-0822-11dc-89f2-005056c00008} -addlastbcdedit /export bcddel tmp三、制作完毕用UltraISO打开VISTA MSDN原版光盘，将e盘下的bcd、winpe.wim添加到光盘boot目录下，将bootmgr.exe.mui、memtest.exe.mui添加到光盘boot\zh-cn目录下，然后保存并刻盘即可。
    


&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 03:53:00 +0800</pubDate><author>【♂孔雀猪】</author><comments>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925360.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/hapeacock/archive/2007/12/09/1925360.aspx</guid><dc:creator>【♂孔雀猪】</dc:creator><fs:srclink>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925360.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579908/1235704</fs:itemid></item><item><title>IMAGEX命令实例</title><link>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925359.aspx</link><wfw:comment>http://blog.csdn.net/hapeacock/comments/1925359.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/hapeacock/comments/commentRss/1925359.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/hapeacock/services/trackbacks/1925359.aspx</trackback:ping><description>下文中，实验所用系统的设置如下：C盘安装操作系统，D盘是光驱，E盘用于保存创建的映像文件。不过当我们用Windows PE光盘引导计算机后情况有所变化，C盘依然是系统盘，但光驱成了X盘，Windows下的E盘成了Windows PE环境下的D盘。因此为了避免混淆，在Windows PE环境下的操作将会使用PE中的盘符名称，但在Windows环境下的操作将会使用Windows中的盘符。
&amp;nbsp;

&amp;nbsp;
&amp;nbsp;
1.ximage /capture c: d:\data.wim &amp;quot;Drive C &amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/capture&amp;rdquo;参数的作用是创建映像文件
&amp;nbsp;
(假设我们希望使用默认设置创建一个C盘的映像，映像文件将以data.wim为名保存在D盘根目录下，并在创建完成后进行数据校验.&amp;ldquo;/capture&amp;rdquo;参数的作用是创建映像文件，而该参数后面的&amp;ldquo;c:&amp;rdquo;则指定了要创建映像的目标分区。&amp;ldquo;d:\data.wim&amp;rdquo;这个参数指定了镜像文件的保存位置以及名称，&amp;ldquo;Drive C&amp;rdquo;参数定义了映像文件的描述，需要用引号引用。最后的&amp;ldquo;/verify&amp;rdquo;参数则会让Ximage创建完映像之后进行校验。当屏幕显示&amp;ldquo;Successfully imaged c:\&amp;rdquo;的字样时表示映像已经创建完成了)
&amp;nbsp;

&amp;nbsp;
2.ximage /apply d:\data.wim 1 c: /verify&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/apply&amp;rdquo;可以使用创建好的映像文件来恢复
(假设我们要把之前创建的保存在D盘的data.wim文件重新恢复到C盘，那么可以首先格式化C盘,这里要注意映像名称后面的编号&amp;ldquo;1&amp;rdquo;，下文中我们将会介绍，Ximage可以把多个镜像文件附加到同一个映像中，那么在使用某个特定镜像部署系统，或者执行其他类似操作的时候，怎样从附加了多个镜像的映像文件中指定特定镜像呢？这里就需要使用编号了，如果希望对第几个镜像进行操作，在映像文件名称后添加该镜像的编号即可。)
&amp;nbsp;

&amp;nbsp;
3.ximage /info d:\data.wim &amp;gt;f:list.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/info&amp;rdquo; 查看映像文件信息
(程序会自动创建一个txt格式的文件,文件的内容就是该映像文件中所有附加的镜像文件的信息.其中&amp;quot;&amp;lt;name&amp;gt;......&amp;lt;/name&amp;gt;&amp;quot;这一段文字的内容,这就是我们在使用&amp;ldquo;/capture&amp;rdquo;参数创建映像文件时输入的描述,因此在创建映像的时候要输入详细的描述信息,方便日后的使用)

&amp;nbsp;

&amp;nbsp;
4. ximage /dir d:\data.wim 1 &amp;gt;d:\list.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/dir&amp;rdquo;查看映像文件内容
(随着使用时间的延长，管理员们可能需要管理越来越多各种用途的映像文件。如何快速从多个映像文件中找到自己的目标就显得非常重要。我们就可以直接把某个映像文件，甚至具体到其中附加的某个镜像的内容显示出来。注意，这一步操作不能在Windows PE环境下进行，必须回到Windows下.这将显示data.wim这个映像文件中包含的镜像内容（如果映像文件中包含了多个镜像，也可以通过编号指定具体镜像）。该命令可以将显示的内容全部输出到D盘一个名为list.txt的文本文件中，使用文本编辑器查看和搜索具体文件就相当简单了。这里有个问题需要注意，就算您的映像文件中只包含了一个镜像，在使用/dir参数的时候依然需要在文件名后面指定镜像编号，否则将无法列出其中的内容。)
&amp;nbsp;

&amp;nbsp;
5.ximage /mountrw e:\data.wim 1 e:\c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/mount&amp;rdquo;&amp;ldquo;/mountrw&amp;rdquo;将映像文件内容映射为文件夹
(e:\c&amp;rdquo;的含义是将镜像映射到E盘下一个名为&amp;ldquo;c&amp;rdquo;的文件夹中。如果该文件夹内当前有文件，那么在被映射的镜像卸载之前，原先的内容将无法访问。映射了镜像之后，我们就可以使用Windows资源管理器打开映射出来的文件夹，查看其中的内容，添加或者删除文件，或者像在操作本地硬盘那样进行其他操作.&amp;ldquo;/mount&amp;rdquo;参数将映像文件中具体的镜像映射为本地硬盘上的文件夹，并编辑其中的内容。&amp;ldquo;/mount&amp;rdquo;参数有两个，分别是&amp;ldquo;/mount&amp;rdquo;和&amp;ldquo;/mountrw&amp;rdquo;，其中前者可以将镜像映射为只读文件夹，而后者可以将镜像映射为可读写文件夹。要注意，这两个命令都只能在Windows XP SP2、Windows Server 2003 SP1以及Windows Vista中使用。)
&amp;nbsp;

&amp;nbsp;
6.ximage /unmount /commit e:\c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/unmount&amp;rdquo;合并对映像文件的修改
(因为我们之前使用的参数是&amp;ldquo;/mountrw&amp;rdquo;，这样映射出来的文件是可写的，因此当用完之后，为了使对文件的更改能够生效，我们需要使用 &amp;ldquo;/unmount&amp;rdquo;参数配合&amp;ldquo;/commit&amp;rdquo;选项，合并对映像文件的修改，并将其卸载)
&amp;nbsp;

&amp;nbsp;
&amp;nbsp;
7.ximage /delete d:\data.wim 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/delete&amp;rdquo;镜像的删除
&amp;nbsp;
(有时候您可能会遇到这样的情况：一个映像文件中附加了很多不同环境的镜像文件，可其中一个镜像文件已经没用了。为了减少存储空间的占用，您可能希望删除不用的镜像文件。)本段内容需要在Windows PE环境下操作
&amp;nbsp;

&amp;nbsp;
8.ximage /export d:\new.wim d:\data.wim 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/export&amp;rdquo;镜像的提取
(您可能还会有这样的需求：想要将附加到一个映像文件中的独立镜像提取出来，做其他用途。这些任务依然可以通过Ximage的参数实现,注意，在提取镜像的时候一定要保证目标映像文件的所在分区具有足够的可用空间。如果可用空间不足，程序不会报错，依然会生成新的映像文件，但是文件本身是不完整的。)本段内容需要在Windows PE环境下操作

&amp;nbsp;

&amp;nbsp;
9.ximage /split d:\data.wim d:\datasplited.swm 640&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/split&amp;rdquo;将创建出来的映像文件按照一定大小拆分，以便刻录到光盘或者保存到其他可以动存储介质上
(如果您希望将创建出来的映像文件按照一定大小拆分，以便刻录到光盘或者保存到其他可以动存储介质上，那么可以使用Ximage的&amp;ldquo;/split&amp;rdquo;参数。例如，如果我们希望将之前创建的data.wim文件以640 MB为大小拆分，以便刻录到CD光盘上,,该操作将会创建一系列带有固定编号的.swm文件，例如我们要拆分的文件是data.wim，那么拆分后的文件就是data1.swm、 data2.swm等。该参数同样有些不足：首先，无法在创建映像文件的时候使用，只能在映像文件创建成功之后使用。另外，拆分的文件大小是以MB为单位指定的，如果我们需要以GB为单位拆分文件以便刻录DVD光盘上，显得不够灵活。)

&amp;nbsp;

&amp;nbsp;

&amp;nbsp;
10.ximage /append c: d:\data.wim &amp;ldquo;Drive C 2&amp;rdquo; /verify&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/append&amp;rdquo;的作用是将目标分区附加到现有文件
(有时我们可能会遇到这样的情况：当我们安装好操作系统之后，需要创建一个映像文件；而安装完补丁程序以及驱动程序之后，需要创建另外一个映像；等安装完所有其他需要的应用程序，并进行过必要的设置之后，还需要创建第三个映像文件。这样的要求有一个特点，那就是三个映像文件中大部分数据都是相同的，而每次都是只有部分文件被增删或者更改。那么按照一般的做法，直接创建三个各自独立的映像文件，无疑浪费了大量的存储空间，而且映像文件太多也不利于日后的管理。为了解决这个问题，Ximage中包含了一个叫做附加的功能。简单来说，该功能可以在一个映像文件中保存多个不同状态下的操作系统镜像。例如之前设想的情况，将操作系统在三个时候的不同状态全部附加到同一个映像文件中，这样，因为操作系统中有大量三个状态下没有发生任何更改的文件，因此这些文件实际上在映像文件中只需要保存一个实例，这就可以在压缩的基础上更进一步减小映像文件的体积。注意，这里提到了两个名词：&amp;ldquo;映像&amp;rdquo;和&amp;ldquo;镜像&amp;rdquo;。为了方便叙述，下文对这两个名词的定义如下：对操作系统所在分区进行&amp;ldquo;复制&amp;rdquo;创建的文件称之为&amp;ldquo;镜像&amp;rdquo;，而多个&amp;ldquo;镜像&amp;rdquo;附加在一起即形成一个&amp;ldquo;映像&amp;rdquo;。如果已经使用了&amp;ldquo;/append&amp;rdquo;参数，就不需要同时使用&amp;ldquo;/capture&amp;rdquo;了。而后面的&amp;ldquo;d:\data.wim&amp;rdquo;则指定了要被附加的文件所在位置和名称。注意，如果被附加的源映像文件被压缩过，那么附加上去的镜像文件就必须进行同样等级的压缩。)

&amp;nbsp;

&amp;nbsp;

&amp;nbsp;
11.配置文件Ximage的某些选项可以由配置文件指定，这样我们就可以预先编写好配置文件，然后一次执行，实现比较复杂的操作。要指定配置文件，需要以&amp;ldquo;/config&amp;rdquo;参数启动Ximage。配置文件中主要有三个字段，各自的含义如下。[ExclusionList]定义了使用&amp;ldquo;/capture&amp;rdquo;参数后被排除的文件和文件夹名称[CompressionExclusionList]定义了不被压缩的文件或文件夹名称，或者文件类型。这里可以使用通配符[AlignmentList]指定文件以64K为范围排列，这些文件将不会被压缩，而压缩后的文件将会以32K为范围排列。我们只需要在文本编辑器，例如Windows记事本中按照上述规定的字段编写内容，然后将文件保存为.ini格式，就可以在使用ximage.exe的时候通过&amp;ldquo;/config&amp;rdquo;参数调用了。
打开Windows记事本或者其他任何文本编辑器，分别输入[ExclusionList]、[CompressionExclusionList]和[AlignmentList]三个字段，然后按照需要为这三个字段设定内容。例如，如果我们希望在创建映像文件的时候跳过分页文件和休眠文件，那么就可以在[ExclusionList]字段下添加这两个文件的名称： &amp;ldquo;Hiberfil.sys&amp;rdquo;和&amp;ldquo;Pagefile.sys&amp;rdquo;。注意，每个文件要占用一行空间。如果我们希望在压缩文件的时候取消对所有扩展名为.zip 的文件的压缩（毕竟它们已经被压缩过了，再次压缩只能延长所需时间，体积的变化不会太明显），那么可以在 [CompressionExclusionList]字段下添加&amp;ldquo;*.zip&amp;rdquo;这一行内容。
注意：通常情况下，如果要使用配置文件，那么就必须在运行ximage命令的时候使用/config参数，并指定配置文件的位置。但如果我们预先将配置文件以wimscript.ini为名保存在ximage.exe文件所在的文件夹下，那么以后运行的时候只要使用了&amp;ldquo;/capture&amp;rdquo;参数，该配置文件就会被自动加载，而不管我们有没有配合&amp;ldquo;/config&amp;rdquo;参数一起使用
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 03:34:00 +0800</pubDate><author>【♂孔雀猪】</author><comments>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925359.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/hapeacock/archive/2007/12/09/1925359.aspx</guid><dc:creator>【♂孔雀猪】</dc:creator><fs:srclink>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925359.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579912/1235704</fs:itemid></item><item><title>多级树集合分裂（SPIHT）算法的过程详解和Matlab实现（5）编码过程——精细扫描</title><link>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925358.aspx</link><wfw:comment>http://blog.csdn.net/chenyusiyuan/comments/1925358.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/chenyusiyuan/comments/commentRss/1925358.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/chenyusiyuan/services/trackbacks/1925358.aspx</trackback:ping><description>&amp;nbsp;本文给出SPIHT编码的精细扫描程序，其中包括一个能够将带小数的十进制数转换为二进制表示的函数，这个转换函数可以实现任意精度的二进制转换，特别是将小数部分转换为二进制表示。希望对有需要的朋友有所帮助。下一篇文章将给出SPIHT的解码程序。请关注后续文章，欢迎 Email 联系交流。4、精细扫描程序function Rn=refinement(N,LSP_Old)% 函数 REFINEMENT()为精细编码程序，对上一级编码产生的重要系数列表LSP_Old，读取每个% 表项相应小波系数绝对值的二进制表示，输出其中第N个重要的位，即相应于 2^N 处的码数% 输入参数：N &amp;mdash;&amp;mdash; 本级编码阈值的指数%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP_Old &amp;mdash;&amp;mdash; 上一级编码产生的重要系数列表% 输出参数：Rn &amp;mdash;&amp;mdash; 精细扫描输出位流global Mat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用Rn=[];% 每级精细扫描开始时，Rn 均为空表% LSP_Old 非空时才执行精细扫描程序if ~isempty(LSP_Old)&amp;nbsp;&amp;nbsp;&amp;nbsp; rlsp=size(LSP_Old,1);% 获取 LSP_Old 的表项个数，对每个表项进行扫描&amp;nbsp;&amp;nbsp;&amp;nbsp; for r=1:rlsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tMat=Mat(LSP_Old(r,1),LSP_Old(r,2));% 读取该表项对应的小波系数值&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [biLSP,Np]=fracnum2bin(abs(tMat),N);% 函数 FRACNUM2BIN() 根据精细扫描对应的权位 N ，将任意的十进制正数转换为二进制数，% 输出参数为二进制表示列表 biLSP 和 权位N与最高权位的距离 Np 。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rn=[Rn,biLSP(Np)];% biLSP(Np)即为小波系数绝对值的二进制表示中第N个重要的位&amp;nbsp;&amp;nbsp;&amp;nbsp; endend（1）十进制数转换为二进制表示的程序function [binlist,qLpoint]=fracnum2bin(num,qLevel)% 函数 FRACNUM2BIN() 根据精细扫描对应的权位 N ，将任意的十进制正数转换为二进制数，% 包括带有任意位小数的十进制数。Matlab中的函数 dec2bin()、dec2binvec()只能将十% 进制数的整数部分转换为二进制表示，对小数部分则不转换。%% 输入参数：num &amp;mdash;&amp;mdash; 非负的十进制数%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; qLevel &amp;mdash;&amp;mdash; 量化转换精度，也可以是精细扫描对应的权位 N% 输出参数：biLSP &amp;mdash;&amp;mdash; 二进制表示列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  Np &amp;mdash;&amp;mdash; 权位N与最高权位的距离，N 也是本级编码阈值的指数intBin=dec2binvec(num);% 首先用Matlab函数dec2binvec()获取整数部分的二进制表示intBin，低位在前，高位在后intBin=intBin(end:-1:1);% 根据个人习惯，将二进制表示转换为高位在前，低位在后lenIB=length(intBin);% 求出二进制表示的长度decpart=num-floor(num);% 求出小数部分decBin=[];% 小数部分的二进制表示初始化为空表% 根据量化精度要求输出总的二进制表示列表if (qLevel+1)&amp;gt;lenIB% 如果量化精度高于整数部分的二进制码长，则输出为零值列表&amp;nbsp;&amp;nbsp;&amp;nbsp; binlist=zeros(1,qLevel+1);&amp;nbsp;&amp;nbsp;&amp;nbsp; qLpoint=1;elseif qLevel&amp;gt;=0% 如果量化精度在整数权位，则输出整数部分的二进制表示intBin% 不需转换小数部分，同时输出量化精度与最高权位的距离Np&amp;nbsp;&amp;nbsp;&amp;nbsp; binlist=intBin;&amp;nbsp;&amp;nbsp;&amp;nbsp; binlist(lenIB-qLevel+1:end)=0;&amp;nbsp;&amp;nbsp;&amp;nbsp; qLpoint=lenIB-qLevel;elseif qLevel&amp;lt;0% 如果量化精度在小数权位，则需转换小数部分&amp;nbsp;&amp;nbsp;&amp;nbsp; N=-1;&amp;nbsp;&amp;nbsp;&amp;nbsp; while N&amp;gt;=qLevel&amp;nbsp;&amp;nbsp;&amp;nbsp; % 小数部分的转换只需进行到量化精度处&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; res=decpart-2^N;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if res==0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decBin=[decBin,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decBin(end+1:-qLevel)=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果小数部分的转换完成时仍未达到量化精度所在的权位，则补零&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elseif res&amp;gt;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decBin=[decBin,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decpart=res;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N=N-1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decBin=[decBin,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N=N-1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp; binlist=[intBin,decBin];&amp;nbsp;&amp;nbsp;&amp;nbsp; qLpoint=lenIB-qLevel;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 输出整数部分和小数部分的二进制表示intBin,decBin，以及量化精度与最高权位的距离Npend&amp;nbsp;&amp;nbsp;&amp;nbsp; 至此，SPIHT算法的编码程序就介绍完毕啦！以后有时间的话会增加熵编码的功能（例如Huffman编码）。</description><pubDate>Sun, 09 Dec 2007 03:13:00 +0800</pubDate><author>chenyusiyuan</author><comments>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925358.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925358.aspx</guid><dc:creator>chenyusiyuan</dc:creator><fs:srclink>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925358.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579915/1235704</fs:itemid></item><item><title>多级树集合分裂（SPIHT）算法的过程详解和Matlab实现（4）编码过程——排序扫描</title><link>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925357.aspx</link><wfw:comment>http://blog.csdn.net/chenyusiyuan/comments/1925357.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/chenyusiyuan/comments/commentRss/1925357.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/chenyusiyuan/services/trackbacks/1925357.aspx</trackback:ping><description>&amp;nbsp;本文给出SPIHT编码的排序扫描代码，排序扫描分为LIP队列扫描和LIS队列扫描两个步骤，其中LIS队列扫描较为复杂，在编程时容易出现错误，要倍加注意。2、LIP队列扫描程序function [Sn,LSP,LIP]=lip_scan(Sn,N,LSP,LIP)% 函数 LIP_SCAN() 检查LIP表的各个表项是否重要，更新列表LIP、LSP和排序位流 Sn% 输入参数：Sn &amp;mdash;&amp;mdash; 本级编码排序位流，为空表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N &amp;mdash;&amp;mdash; 本级编码阈值的指数%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP &amp;mdash;&amp;mdash; 上一级编码生成的重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP &amp;mdash;&amp;mdash; 上一级编码生成的不重要系数列表% 输出参数：Sn &amp;mdash;&amp;mdash; 对上一级编码生成的LIP列表扫描后更新的排序位流%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP &amp;mdash;&amp;mdash; 对上一级编码生成的LIP列表扫描后更新的重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP &amp;mdash;&amp;mdash; 经本级LIP扫描处理后更新的不重要系数列表global Mat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用rlip=size(LIP,1);% r 是指向 LIP 当前读入表项位置的指针r=1;% 由于循环过程中列表 LIP 的表长会变化，不适合用 for 循环，故采用 while 循环while r&amp;lt;=rlip% 读入当前表项的坐标值&amp;nbsp;&amp;nbsp;&amp;nbsp; rN=LIP(r,1);&amp;nbsp;&amp;nbsp;&amp;nbsp; cN=LIP(r,2);% 调用 SNOUT() 函数来判断该表项是否重要&amp;nbsp;&amp;nbsp;&amp;nbsp; if SnOut(LIP(r,:),N)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 若重要，则输入&amp;lsquo;1&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 输入正负符号&amp;lsquo;1&amp;rsquo;或&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Mat(rN,cN)&amp;gt;=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该表项添加到重要系数列表 LSP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP=[LSP;LIP(r,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该表项从 LIP 中删除&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP(r,:)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 若不重要，则输入&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将指针指向下一个表项&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r=r+1;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp; % 判断当前 LIP 的表长&amp;nbsp;&amp;nbsp;&amp;nbsp; rlip=size(LIP,1);end3、LIS队列扫描程序function [LSP,LIP,LIS,LisFlag,Sn,N]=lis_scan(N,Sn,LSP,LIP,LIS,LisFlag)% 函数 LIS_SCAN() 检查LIS表的各个表项是否重要，更新列表LIP、LSP、LIS、LisFlag和排序位流 Sn% 输入参数：N &amp;mdash;&amp;mdash; 本级编码阈值的指数%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn &amp;mdash;&amp;mdash; 本级编码排序位流，为空表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP &amp;mdash;&amp;mdash; 上一级编码生成的重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP &amp;mdash;&amp;mdash; 上一级编码生成的不重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS &amp;mdash;&amp;mdash; 上一级编码生成的不重要子集列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag &amp;mdash;&amp;mdash; 上一级编码生成的不重要子集表项类型列表% 输出参数：LSP &amp;mdash;&amp;mdash; 本级LIS列表扫描后更新的重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP &amp;mdash;&amp;mdash; 经本级LIS扫描处理后更新的不重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS &amp;mdash;&amp;mdash; 本级LIS列表扫描后更新的不重要子集列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag &amp;mdash;&amp;mdash; 本级LIS列表扫描后更新的不重要子集表项类型列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn &amp;mdash;&amp;mdash; 本级LIS列表扫描后更新的排序位流%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N &amp;mdash;&amp;mdash; 下一级编码阈值的指数global Mat rMat cMat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用% 读入当前 LIS 的表长rlis=size(LIS,1);% ls 是指向 LIS 当前表项位置的指针，初始位置为1ls=1;% 由于循环过程中列表 LIS 的表长会变化，不适合用 for 循环，故采用 while 循环while ls&amp;lt;=rlis&amp;nbsp;&amp;nbsp;&amp;nbsp; % 读入当前 LIS 表项的类型&amp;nbsp;&amp;nbsp;&amp;nbsp; switch LisFlag(ls)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % &amp;lsquo;D&amp;rsquo;类表项，包含孩子和非直系子孙&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'D'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 读入该表项的坐标值&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rP=LIS(ls,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cP=LIS(ls,2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成&amp;lsquo;D&amp;rsquo;型子孙树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chD=coef_DOL(rP,cP,'D');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 判断该子孙树是否重要&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isImt=SnOut(chD,N);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if isImt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果该子孙树重要，就输入&amp;lsquo;1&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成该表项的孩子树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chO=coef_DOL(rP,cP,'O');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 分别判断每个孩子的重要性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for r=1:4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 判断该孩子的重要性和正负符号&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [isImt,Sign]=SnOut(chO(r,:),N);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if isImt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果重要，就输入&amp;lsquo;1&amp;rsquo;和正负标志到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Sign&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该孩子添加到重要系数列表 LSP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP=[LSP;chO(r,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果不重要，就输入&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该孩子添加到不重要系数列表 LIP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 本级阈值下不重要的系数在下一级编码中可能是重要的&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP=[LIP;chO(r,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成该表项的非直系子孙树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chL=coef_DOL(rP,cP,'L');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ~isempty(chL)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果&amp;lsquo;L&amp;rsquo;型树非空，则将该表项添加到列表 LIS 的尾端等待扫描&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS=[LIS;LIS(ls,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 表项类型更改为&amp;lsquo;L&amp;rsquo;型&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag=[LisFlag,'L'];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 至此，该表项的&amp;lsquo;D&amp;rsquo;型LIS扫描结束，在LIS中删除该项及其类型符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS(ls,:)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag(ls)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果&amp;lsquo;L&amp;rsquo;型树为空集&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 则该表项的&amp;lsquo;D&amp;rsquo;型LIS扫描结束，在LIS中删除该项及其类型符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS(ls,:)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag(ls)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果该表项的&amp;lsquo;D&amp;rsquo;型子孙树不重要，就输入&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将指针指向下一个 LIS 表项&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls=ls+1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 更新当前 LIS 的表长，转入下一表项的扫描&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rlis=size(LIS,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'L'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 对&amp;lsquo;L&amp;rsquo;类表项，不需判断孩子的重要性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 读入该表项的坐标值&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rP=LIS(ls,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cP=LIS(ls,2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成&amp;lsquo;L&amp;rsquo;型子孙树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chL=coef_DOL(rP,cP,'L');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 判断该子孙树是否重要&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isImt=SnOut(chL,N);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if isImt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果该子孙树重要，就输入&amp;lsquo;1&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成该表项的孩子树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chO=coef_DOL(rP,cP,'O');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该&amp;lsquo;L&amp;rsquo;类表项从 LIS 中删除&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS(ls,:)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag(ls)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将表项的四个孩子添加到 LIS 的结尾，标记为&amp;lsquo;D&amp;rsquo;类表项&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS=[LIS;chO(1:4,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag(end+1:end+4)='D';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果该子孙树是不重要的，就输入&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将指针指向下一个 LIS 表项&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls=ls+1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 更新当前 LIS 的表长，转入下一表项的扫描&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rlis=size(LIS,1);&amp;nbsp;&amp;nbsp;&amp;nbsp; endend% 对 LIS 的扫描结束，将本级阈值的指数减1，准备进入下一级编码N=N-1;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS队列扫描程序中调用的子程序有：

    COEF_DOL() ：根据子孙树的类型'type'来计算点(r,c)的子孙列表；
    SNOUT() ：根据本级阈值指数 N 判断坐标集 coefSet 是否重要；

（1）子孙树生成程序function chList=coef_DOL(r,c,type)% 函数 COEF_DOL() 根据子孙树的类型'type'来计算点(r,c)的子孙列表% 输入参数：r,c &amp;mdash;&amp;mdash; 小波系数的坐标值%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type &amp;mdash;&amp;mdash; 子孙树的类型%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'D'：点(r,c)的所有子孙（包括孩子）%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'O'：点(r,c)的所有孩子%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'L'：点(r,c)的所有非直系子孙，L(r,c)=D(r,c)-O(r,c)% 输出参数：chList &amp;mdash;&amp;mdash; 点(r,c)的'type'型子孙列表global Mat rMat cMat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用[Dch,Och]=childMat(r,c);% 函数 CHILDMAT() 返回点(r,c)的'D'型和'O'型子孙列表Lch=setdiff(Dch,Och,'rows');% 根据关系式 L(r,c)=D(r,c)-O(r,c)求出'L'型子孙列表% Matlab函数 SETDIFF(A,B)计算具有相同列数的两个矩阵A、B中，A有而B无的元素集合% 根据输入参数'type'选择输出参数switch type&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'D'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chList=Dch;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'O'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chList=Och;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'L'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chList=Lch;endfunction [trAll,trChl]=childMat(trRows,trCols)% 函数 CHILDMAT() 根据输入的坐标值trRows、trCols 输出其全体子孙 trAll，% 其中包括孩子树 trChl；另外，根据算法原理，还要判断子孙树是否全为零，% 若为全零，则trAll、trChl均为空表global Mat rMat cMat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用trAll=treeMat(trRows,trCols);% 调用函数 treeMat() 生成该点的子孙树坐标队列trZero=1;% 用变量 trZero 来标记该点是否具有非零子孙rA=size(trAll,1);% 如果子孙树 trAll 中有系数值不为零，则 trZero=0，表示该点具有非零子孙for r=1:rA&amp;nbsp;&amp;nbsp;&amp;nbsp; if Mat(trAll(r,1),trAll(r,2))~=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trZero=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp;&amp;nbsp;&amp;nbsp; endendif trZero&amp;nbsp;&amp;nbsp;&amp;nbsp; trAll=[];&amp;nbsp;&amp;nbsp;&amp;nbsp; trChl=[];else&amp;nbsp;&amp;nbsp;&amp;nbsp; trChl=trAll(1:4,:);&amp;nbsp;&amp;nbsp;&amp;nbsp; % 函数 treeMat() 输出的全体子孙树 trAll 头四位元素就组成相应的孩子树end&amp;nbsp;&amp;nbsp;&amp;nbsp; 上面调用的函数treeMat() 与EZW算法中使用的程序是一样的，这里就不写出来了，详细代码请参见《嵌入式小波零树（EZW）算法的过程详解和Matlab代码（1）构建扫描次序表》。（2）系数集重要性判别程序function [isImt,Sign]=SnOut(coefSet,N)% 函数 SNOUT() 根据本级阈值指数 N 判断坐标集 coefSet 是否重要 isImt ，对单元素% 的系数集输出该元素的正负符号 Sign 。global Mat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用rSet=size(coefSet,1);% 读取坐标集中各元素的系数值for r=1:rSet&amp;nbsp;&amp;nbsp;&amp;nbsp; cMat(r)=Mat(coefSet(r,1),coefSet(r,2));end% 根据系数最大值判断该坐标集是否重要if max(abs(cMat))&amp;gt;=2^N&amp;nbsp;&amp;nbsp;&amp;nbsp; isImt=1;else&amp;nbsp;&amp;nbsp;&amp;nbsp; isImt=0;end% 对单个元素的坐标集，判断该元素的正负符号if cMat(1)&amp;gt;=0&amp;nbsp;&amp;nbsp;&amp;nbsp; Sign=1;else&amp;nbsp;&amp;nbsp;&amp;nbsp; Sign=0;end</description><pubDate>Sun, 09 Dec 2007 03:03:00 +0800</pubDate><author>chenyusiyuan</author><comments>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925357.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925357.aspx</guid><dc:creator>chenyusiyuan</dc:creator><fs:srclink>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925357.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579918/1235704</fs:itemid></item><item><title>DFM Editor</title><link>http://blog.csdn.net/linhanshi/archive/2007/12/09/1925356.aspx</link><wfw:comment>http://blog.csdn.net/linhanshi/comments/1925356.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/linhanshi/comments/commentRss/1925356.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/linhanshi/services/trackbacks/1925356.aspx</trackback:ping><description>&amp;nbsp;DFM Editor allows edit and create Borland Delphi VCL Forms in text and binary format. It is compatible with all Borland Delphi versions (including BDS).
DFM Editor can extracts forms from compiled executables and DLLs (or others Portable Executable files) by its extraction tool.
Syntax highlihting editor, object inspector and object tree view are tools that make work easier.
There's form preview tool available so you can view form in WYSIWYG mode.
DFM Editor can display interesting information about selected Borland Package file and registered classes.

http://www.mitec.cz/Downloads/DFMEdit.zip</description><pubDate>Sun, 09 Dec 2007 02:56:00 +0800</pubDate><author>linhanshi</author><comments>http://blog.csdn.net/linhanshi/archive/2007/12/09/1925356.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/linhanshi/archive/2007/12/09/1925356.aspx</guid><dc:creator>linhanshi</dc:creator><fs:srclink>http://blog.csdn.net/linhanshi/archive/2007/12/09/1925356.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579919/1235704</fs:itemid></item><item><title>多级树集合分裂（SPIHT）算法的过程详解和Matlab实现（3）编码过程——主程序</title><link>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925355.aspx</link><wfw:comment>http://blog.csdn.net/chenyusiyuan/comments/1925355.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/chenyusiyuan/comments/commentRss/1925355.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/chenyusiyuan/services/trackbacks/1925355.aspx</trackback:ping><description>上一篇文章已经详细介绍了SPIHT算法的编码过程，接下来有关编码和解码的部分就直接把代码写出来啦，我的代码里有详细的中文注释，基本上把程序的每个步骤都作了说明，呵呵，利人也利己！1、首先给出编码的主程序function [T,SnList,RnList,ini_LSP,ini_LIP,ini_LIS,ini_LisFlag]=spihtcoding(DecIm,imDim,codeDim)% 函数 SPIHTCODING() 是SPIHT算法的编码主程序% 输入参数：DecIm&amp;nbsp;&amp;nbsp; &amp;mdash;&amp;mdash;小波分解系数矩阵；%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imDim&amp;nbsp;&amp;nbsp; &amp;mdash;&amp;mdash;小波分解层数；%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeDim &amp;mdash;&amp;mdash;编码级数。% 输出参数：T &amp;mdash;&amp;mdash; 初始阈值，T=2^N，N=floor(log2(max{|c(i,j)|}))，c(i,j)为小波系数矩阵的元素%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SnList &amp;mdash;&amp;mdash; 排序扫描输出位流%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RnList &amp;mdash;&amp;mdash; 精细扫描输出位流%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ini_L* &amp;mdash;&amp;mdash; 初始系数（集合）表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP：重要系数表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP：不重要系数表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS：不重要子集表，其中的表项是D型或L型表项的树根点%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag：LIS中各表项的类型，包括D型和L型两种global Mat rMat cMat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用%---------------------------%% ----- Threshold ----- %%---------------------------%Mat=DecIm;MaxMat=max(max(abs(Mat)));N=floor(log2(MaxMat));T=2^N;% 公式：N=floor(log2(max{|c(i,j)|}))，c(i,j)为小波系数矩阵的元素%--------------------------------------%% ----- Output Intialization ----- %%--------------------------------------%SnList=[];RnList=[];ini_LSP=[];ini_LIP=coef_H(imDim);rlip=size(ini_LIP,1);ini_LIS=ini_LIP(rlip/4+1:end,:);rlis=size(ini_LIS,1);ini_LisFlag(1:rlis)='D';% ini_LSP：扫描开始前无重要系数，故LSP=[]；% ini_LIP：所有树根的坐标集，对于N层小波分解，LIP是LL_N,LH_N,HL_N,HH_N 所有%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 系数的坐标集合；%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 函数 COEF_H() 用于计算树根坐标集 H% ini_LIS：初始时，LIS是LH_N,HL_N,HH_N 所有系数的坐标集合；在SPIHT算法中，%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LL_N 没有孩子。% ini_LisFlag：初始时，LIS列表的表项均为D型。%------------------------------------------------%% ----- Coding Input Initialization ------ %%------------------------------------------------%LSP=ini_LSP;LIP=ini_LIP;LIS=ini_LIS;LisFlag=ini_LisFlag;% 将待输出的各项列表存入相应的编码工作列表%--------------------------------%% ----- Coding Loop ------ %%--------------------------------%for d=1:codeDim&amp;nbsp;&amp;nbsp;&amp;nbsp; %------------------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- Coding Initialization ------- %&amp;nbsp;&amp;nbsp;&amp;nbsp; %------------------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[];&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP_Old=LSP;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 每级编码产生的Sn都是独立的，故Sn初始化为空表&amp;nbsp;&amp;nbsp;&amp;nbsp; % 列表LSP_Old用于存储上级编码产生的重要系数列表LSP，作为本级精细扫描的输入&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- Sorting Pass ----- %&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- LIP Scan -------- %&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %----------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; [Sn,LSP,LIP]=lip_scan(Sn,N,LSP,LIP);&amp;nbsp;&amp;nbsp;&amp;nbsp; % 检查LIP表的小波系数，更新列表LIP、LSP和排序位流 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- LIS Scan ----- %&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; [LSP,LIP,LIS,LisFlag,Sn,N]=lis_scan(N,Sn,LSP,LIP,LIS,LisFlag);&amp;nbsp;&amp;nbsp;&amp;nbsp; % 这里，作为输出的N比作为输入的N少1，即 out_N=in_N-1&amp;nbsp;&amp;nbsp;&amp;nbsp; % 各项输出参数均作为下一编码级的输入&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- Refinement Pass ----- %&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; Rn=refinement(N+1,LSP_Old);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; % 精细扫描是在当前阈值T=2^N下，扫描上一编码级产生的LSP，故输入为(N+1,LSP_Old)，&amp;nbsp;&amp;nbsp;&amp;nbsp; % 输出为精细位流 Rn&amp;nbsp;&amp;nbsp;&amp;nbsp; %-----------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- Output Dataflow ----- %&amp;nbsp;&amp;nbsp;&amp;nbsp; %-----------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; SnList=[SnList,Sn,7];&amp;nbsp;&amp;nbsp;&amp;nbsp; RnList=[RnList,Rn,7];&amp;nbsp;&amp;nbsp;&amp;nbsp; % 数字&amp;lsquo;7&amp;rsquo;作为区分符,区分不同编码级的Rn、Sn位流end&amp;nbsp;&amp;nbsp;&amp;nbsp; 编码主程序中调用到的子程序有：

    COEF_H() ：用于计算树根坐标集 H ，生成初始的LIP队列；
    LIP_SCAN() ：检查LIP表的各个表项是否重要，更新列表LIP、LSP和排序位流 Sn ；
    LIS_SCAN() ：检查LIS表的各个表项是否重要，更新列表LIP、LSP、LIS、LisFlag和排序位流 Sn ；
    REFINEMENT() ：精细扫描编码程序，输出精细位流 Rn 。

（1）下面是计算树根坐标集 H 的程序function lp=coef_H(imDim)% 函数 COEF_H() 根据矩阵的行列数rMat、cMat和小波分解层数imDim来计算树根坐标集 H% 输入参数：imDim &amp;mdash;&amp;mdash; 小波分解层数,也可记作 N% 输出参数：lp &amp;mdash;&amp;mdash; rMat*cMat矩阵经N层分解后，LL_N,LH_N,HL_N,HH_N 所有系数的坐标集合global rMat cMat% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用row=rMat/2^(imDim-1);col=cMat/2^(imDim-1);% row、col是 LL_N,LH_N,HL_N,HH_N 组成的矩阵的行、列数lp=listorder(row,col,1,1);% 因为 LIP 和 LIS 中元素(r,c)的排列顺序与 EZW 零树结构的扫描顺序相同% 直接调用函数 LISTORDER() 即可获得按EZW扫描顺序排列的LIP列表（2）这里调用了函数 LISTORDER() 来获取按EZW扫描顺序排列的LIP列表，以下是该函数的程序代码：function lsorder=listorder(mr,mc,pr,pc)% 函数 LISTORDER() 生成按&amp;lsquo;Z&amp;rsquo;型递归结构排列的坐标列表% 函数递归原理：对一个mr*mc的矩阵，其左上角元素的坐标为(pr,pc)；首先将矩阵按&amp;ldquo;田&amp;rdquo;% 字型分成四个对等的子矩阵，每个子矩阵的行、列数均为mr/2、mc/2，左上角元素的坐标% 从上到下、从左到右分别为(pr,pc)、(pr,pc+mc/2)、(pr+mr/2,pc)、(pr+mr/2,pc+mc/2)。% 把每个子矩阵再分裂成四个矩阵，如此递归分裂下去，直至最小矩阵的行列数等于2，获取最小% 矩阵的四个点的坐标值，然后逐步向上回溯，即可得到按&amp;lsquo;Z&amp;rsquo;型递归结构排列的坐标列表。lso=[pr,pc;pr,pc+mc/2;pr+mr/2,pc;pr+mr/2,pc+mc/2];% 列表lso是父矩阵分裂成四个子矩阵后，各子矩阵左上角元素坐标的集合mr=mr/2;mc=mc/2;% 子矩阵的行列数是父矩阵的一半lm1=[];lm2=[];lm3=[];lm4=[];if (mr&amp;gt;1)&amp;amp;&amp;amp;(mc&amp;gt;1)% 按&amp;lsquo;Z&amp;rsquo;型结构递归&amp;nbsp;&amp;nbsp;&amp;nbsp; ls1=listorder(mr,mc,lso(1,1),lso(1,2));&amp;nbsp;&amp;nbsp;&amp;nbsp; lm1=[lm1;ls1];&amp;nbsp;&amp;nbsp;&amp;nbsp; ls2=listorder(mr,mc,lso(2,1),lso(2,2));&amp;nbsp;&amp;nbsp;&amp;nbsp; lm2=[lm2;ls2];&amp;nbsp;&amp;nbsp;&amp;nbsp; ls3=listorder(mr,mc,lso(3,1),lso(3,2));&amp;nbsp;&amp;nbsp;&amp;nbsp; lm3=[lm3;ls3];&amp;nbsp;&amp;nbsp;&amp;nbsp; ls4=listorder(mr,mc,lso(4,1),lso(4,2));&amp;nbsp;&amp;nbsp;&amp;nbsp; lm4=[lm4;ls4];endlsorder=[lso;lm1;lm2;lm3;lm4];% 四个子矩阵结束递归回溯到父矩阵时，列表lsorder的头四个坐标值为列表lso的元素% 这四个坐标值与后面的各个子矩阵的坐标元素有重叠，故需消去% 当函数输出的列表长度length(lsorder)与矩阵的元素个数mr*mc*4不相等时，% 就说明有坐标重叠发生。len=length(lsorder);lsorder=lsorder(len-mr*mc*4+1:len,:);&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 02:47:00 +0800</pubDate><author>chenyusiyuan</author><comments>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925355.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925355.aspx</guid><dc:creator>chenyusiyuan</dc:creator><fs:srclink>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925355.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579920/1235704</fs:itemid></item><item><title>ipcc</title><link>http://blog.csdn.net/xwchen/archive/2007/12/09/1925354.aspx</link><wfw:comment>http://blog.csdn.net/xwchen/comments/1925354.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/xwchen/comments/commentRss/1925354.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/xwchen/services/trackbacks/1925354.aspx</trackback:ping><description>IPCCX装完后连接不了LDAP,怎么解决？？
装完了IPCCX, 靠， 直接给我来歌60秒关机， 后面还有LDAP连接问题，我的IPCCX server 可以ping通ccm server, 为什么LDAP会挂呢？？？请问我现在要怎么解决咯？？
IPCCX的LDAP要利用JTAPI到CCM來做連結，你可以去查CCM的ROUTE ROINT看有沒有建立JTAPI的PORT，不然也可以試試REBOOT CCM看問題是否能解決?


    
        
            aganbaby (宝宝干) 
            小试牛刀
            
                
                    
                        
                        
                        
                    
                
            
            UID 4313精华 0积分 583帖子 74金币 119 阅读权限 0注册 2006-9-1状态 离线 
            
            
            
                
                    
                        
                        
                        #3
                        &amp;nbsp; 中 小
                        使用道具&amp;nbsp;&amp;nbsp;
                        发表于 2007-1-23 15:12&amp;nbsp; 资料&amp;nbsp; 个人空间&amp;nbsp; 短消息&amp;nbsp; 加为好友&amp;nbsp; 
                        
                        
                    
                    
                        
                        
                        这个问题我碰到过，60s关机是因为IPCX服务里面的nodemanager服务一直处于starting状态最后导致60s关机，而无法与ldap连接也是因为部分服务起不来的原故，这是因为你的宿主机内存过少，适当的减少虚拟机内存给宿主机就不会出现这个问题了</description><pubDate>Sun, 09 Dec 2007 02:42:00 +0800</pubDate><author>xwchen</author><comments>http://blog.csdn.net/xwchen/archive/2007/12/09/1925354.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/xwchen/archive/2007/12/09/1925354.aspx</guid><dc:creator>xwchen</dc:creator><fs:srclink>http://blog.csdn.net/xwchen/archive/2007/12/09/1925354.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579921/1235704</fs:itemid></item><item><title>SQL Server 2005 Express 远程访问设置</title><link>http://blog.csdn.net/xiongyilong/archive/2007/12/09/1925353.aspx</link><wfw:comment>http://blog.csdn.net/xiongyilong/comments/1925353.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/xiongyilong/comments/commentRss/1925353.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/xiongyilong/services/trackbacks/1925353.aspx</trackback:ping><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL Server 2005 Express 远程访问设置方法
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 熊义龙
SQL Server 2005 Express 作为微软数据库的低端解决方案，在开发小型应用和WEB应用中有广泛的使用。但是SQL Server 2005 Exrpress在默认安装下只允许本机访问，如何启用网络访问功能就很有必要，现在我简单的介绍一下。
1、&amp;nbsp;确认成功安装SQL Server 2005 Express和 数据库服务已经启动。安装完成后，可以通过随SQL Server 2005 Express一同安装的工具 SQL Server Configuration Manager 查看数据库服务和其他的配置信息。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
上图显示数据库服务已经启用。
2、&amp;nbsp;查看SQL Server Express 2005 网络配置信息（SQL Server 2005 Network Configuration――&amp;gt; Protocols for SQLEXPRESS）。默认的情况下右边列表中的Named Pipes和TCP/IP的状态为Disable，即没有启用。右键点击这两项，在弹出菜单中选中Enable启用这两个协议，如下图。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
3、&amp;nbsp;在TCP/IP协议上双击鼠标，弹出对话框。修改对话框Protocol属性页中的&amp;ldquo;Listen All &amp;rdquo;项设为&amp;ldquo;no&amp;rdquo;。IP Address属性页中，修改你要数据库服务监听的IP地址的属性，修改Enabled属性为Yes，修改TCP Dynamic Ports属性为空，TCP Port项在默认安装下为空，现在修改为我们监听端口1433。修改后的状态如下图所示；
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp