<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[代码工人]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[Delphi SQL Java]]></description>
<link>http://hi.baidu.com/dyuan2008</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[eclipse 插件开发资源]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/18426582e867fea80df4d235.html]]></link>
        <description><![CDATA[
		
		http://space.itpub.net/14734416/viewspace-442471<br>
【Eclipse插件开发】资源不同步问题分析 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/18426582e867fea80df4d235.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月28日 星期一  22:34</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/18426582e867fea80df4d235.html</guid>
</item>

<item>
        <title><![CDATA[IPartListener和IPartListener2作用于eclipse视图之间的联系2]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/9bab9fcc1033ab1a00e9280f.html]]></link>
        <description><![CDATA[
		
		以上文章转载自：<font style="background-color: rgb(199, 237, 204);"><a href="http://blog.csdn.net/starshus/archive/2006/01/04/570540.aspx">http://blog.csdn.net/starshus/archive/2006/01/04/570540.aspx</a>&#160;感谢原作者。<br>
<br>
实际使用中，发现其实有两个，IPartListener 和 IPartListener2 ，都在包<font style="background-color: rgb(199, 237, 204);">org.eclipse.ui中。他们的区别在于IPartListener2 更加丰富一些，多了 Hidden,Visible,InputChanged 这三个事件，而且参数也有区别。<br>
IPartListener&#160;里面的方法的参数为 ：<font style="background-color: rgb(199, 237, 204);">IWorkbenchPart part</font><br>
IPartListener2&#160;里面的方法的参数为：<font style="background-color: rgb(199, 237, 204);">IWorkbenchPartReference partRef</font><br>
<br>
当使用 IPartListener2&#160;时，要获取到part，这样就行： <font style="background-color: rgb(199, 237, 204);">partRef.getPart(false)<br>
<br>
关于IPartListener(2)结合view或action使用的方式，转载的文章已经讲得很清楚了，感觉不错，谢谢原作者。<br>
</font><br>
在action中，我是在构造函数和dispose函数中分别加入和取消的，代码如下：<br>
</font></font>
<p><font style="background-color: rgb(199, 237, 204);"><font style="background-color: rgb(199, 237, 204);">&#160;</font></font></p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><font style="background-color: rgb(199, 237, 204);"><font style="background-color: rgb(199, 237, 204);"><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" ><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&#160;MenuHandler&#160;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&#160;AbstractHandler&#160;</span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);">&#160;ISelectionChangedListener&#160;,&#160;IPartListener&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" >/**&#160;*/</span><span ><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;*&#160;The&#160;constructor.<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;*&#160;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;*&#160;</span><span style="color: rgb(128, 128, 128);">@throws</span><span style="color: rgb(0, 128, 0);">&#160;EngineException<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">*/</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;MenuHandler()&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;AuditPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow()<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.getActivePage().addPartListener(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">);<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;@Override<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;dispose()&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;AuditPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow()<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.getActivePage().removePartListener(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">);<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">super</span><span style="color: rgb(0, 0, 0);">.dispose();<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">@Override<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partActivated(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println();<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;@Override<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partBroughtToTop(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&#160;TODO&#160;Auto-generated&#160;method&#160;stub</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"></span><span style="color: rgb(0, 0, 0);">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println();<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;@Override<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partClosed(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&#160;TODO&#160;Auto-generated&#160;method&#160;stub</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;@Override<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partDeactivated(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&#160;TODO&#160;Auto-generated&#160;method&#160;stub</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;@Override<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partOpened(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&#160;TODO&#160;Auto-generated&#160;method&#160;stub</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" ></span><span style="color: rgb(0, 0, 0);">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&#160;(part&#160;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&#160;MyShootView)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;((MyShootView)&#160;part)<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.addSelectionChangedListener(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">);<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">}</span></span></span></font></font></div>
<p><font style="background-color: rgb(199, 237, 204);"><font style="background-color: rgb(199, 237, 204);"> 不过需要注意，eclipse里面有些视图，例如 <font style="background-color: rgb(199, 237, 204);">ContentOutline 视图即大纲视图，当你第一次打开它，会触发partOpen 事件，然后立刻触发 partVisible 事件，当你再关掉它，则只会触发 partHidden 事件，而不会触发close。所以他们实际上是没有真正的关闭，当第一次打开以后，都会一直存在，知道eclipse退出。<br>
<br>
而用户自己建立的view，好像就不是这样运作的，当第一次打开的时候，会触发open和visible事件，当关闭时，会触发hidden和close事件。</font></font></font></p>
<font style="background-color: rgb(199, 237, 204);"><font style="background-color: rgb(199, 237, 204);"><font style="background-color: rgb(199, 237, 204);"><font style="background-color: rgb(199, 237, 204);">这种情况，就要使用IPartListener2来实现了。</font></font></font></font> <a href="http://hi.baidu.com/dyuan2008/blog/item/9bab9fcc1033ab1a00e9280f.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/9bab9fcc1033ab1a00e9280f.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月25日 星期五  21:27</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/9bab9fcc1033ab1a00e9280f.html</guid>
</item>

<item>
        <title><![CDATA[IPartListener和IPartListener2作用于eclipse视图之间的联系。]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/f6dfbe263c15381d8b82a10f.html]]></link>
        <description><![CDATA[
		
		<p>来自：<font style="background-color: rgb(199, 237, 204);">http://blog.csdn.net/starshus/archive/2006/01/04/570540.aspx</font></p>
<p><font style="background-color: rgb(199, 237, 204);">1.判断这个view当前是否为active的好方法:</font></p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><font style="background-color: rgb(199, 237, 204);"><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" ><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);">&#160;isActivePart()&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;IWorkbenchPart&#160;part&#160;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&#160;getViewSite().getPage().getActivePart();<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&#160;part&#160;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&#160;part.equals(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"></span></font></div>
<p><font style="background-color: rgb(199, 237, 204);"><br>
2.自己的rcp程序里有多个view,它们之间是有联系的,如果关掉其中一个view时,<br>
要做些事,怎么知道它是什么时候关掉的呢?我在rcp的新闻组上找到了答案:</font></p>
<p><font style="background-color: rgb(199, 237, 204);">关掉Editor或Viewer时调用自己逻辑的方法:</font></p>
<p><font style="background-color: rgb(199, 237, 204);">1)如果是editor,那么让它实现org.eclipse.ui.ISaveablePart2接口.</font></p>
<p><font style="background-color: rgb(199, 237, 204);">2)如果是view,在view class里面加上下面这个方法,并且调用它,比如:<br>
在ViewPart#init()里面:<br>
<br>
</font></p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><font style="background-color: rgb(199, 237, 204);"><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" ><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;initPartListener()&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >getSite().getPage().addPartListener(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&#160;IPartListener()&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partOpened(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&#160;(part&#160;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&#160;YourPartView.</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&#160;your&#160;logics</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"></span><span style="color: rgb(0, 0, 0);">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partDeactivated(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&#160;(part&#160;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&#160;YourPartView.</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&#160;your&#160;logics</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"></span><span style="color: rgb(0, 0, 0);">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partClosed(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&#160;(part&#160;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&#160;YourPartView.</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&#160;your&#160;logics</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"></span><span style="color: rgb(0, 0, 0);">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partBroughtToTop(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&#160;(part&#160;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&#160;YourPartView.</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&#160;your&#160;logics</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"></span><span style="color: rgb(0, 0, 0);">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;partActivated(IWorkbenchPart&#160;part)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&#160;(part&#160;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&#160;YourPartView.</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" >&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&#160;your&#160;logics</span><span style="color: rgb(0, 128, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"></span><span style="color: rgb(0, 0, 0);">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&#160;&#160;&#160;&#160;}</span></span><span style="color: rgb(0, 0, 0);">);<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"></span></font></div>
<p><font style="background-color: rgb(199, 237, 204);"> 或者这样写也可以:<br>
让这个view类实现PartListener接口<br>
然后在这个view的createPartControl()里加上:<br>
getViewSite().getPage().addPartListener(this);</font></p>
<p><font style="background-color: rgb(199, 237, 204);">或是这样写:</font></p>
<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><font style="background-color: rgb(199, 237, 204);"><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" ><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;createPartControl(Composite&#160;parent)&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<img src="http://www.blogjava.net/Images/dot.gif">&#160;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;getSite().getWorkbenchWindow().&#160;getPartService().addPartListener(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">);<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" ><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" ></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&#160;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&#160;dispose()&#160;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" ><img src="http://www.blogjava.net/Images/dot.gif"></span><span ><span style="color: rgb(0, 0, 0);">{&#160;<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;getSite().getWorkbenchWindow().&#160;getPartService().removePartListener(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">);<br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="color: rgb(0, 0, 0);"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"><br>
<img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"></span></font></div>
<p><font style="background-color: rgb(199, 237, 204);"> 注意:</font></p>
<p><font style="background-color: rgb(199, 237, 204);">1)Views也能实现ISaveablePart2</font></p>
<p><font style="background-color: rgb(199, 237, 204);">2)在view关闭时要做什么事时,建议就用IPartListener2</font></p>
<p><font style="background-color: rgb(199, 237, 204);">3)View上的X是与关闭动作关联在一起的,要用别的方法达到目的你只有写自己的<br>
关闭动作.</font></p>
<p><font style="background-color: rgb(199, 237, 204);">4)ISaveablePart有意义吗?<br>
当然有,有些程序的data model在view上,它们能被修改,所以它们必须有在view<br>
关闭时保存的能力.(所以用户的修改不会丢失)<br>
有些时候editors不适合展示数据model.</font></p>
<p>-----------------------------------------------------------------------------------------------</p> <a href="http://hi.baidu.com/dyuan2008/blog/item/f6dfbe263c15381d8b82a10f.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/f6dfbe263c15381d8b82a10f.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月25日 星期五  21:27</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/f6dfbe263c15381d8b82a10f.html</guid>
</item>

<item>
        <title><![CDATA[Red5+OpenOffice+OpenMeetings架设视频会议网络(转)]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/066d8c510ba8b710377abe55.html]]></link>
        <description><![CDATA[
		
		因工作需要，这两天弄了一个视频会议服务器。采用了flash流媒体服务器Red5+OpenMeetings。其实是OpenMeetings的运行依 赖于Red5，也就是说OpenMeetings是一个基于Flash的视频会议解决方案。OpenMeetings的一大亮点是能够在会议过程中做 PPT的演示，这一功能得益于OpenOffice的文档转换能力和提供Java远程访问的能力。<br>
&nbsp;&nbsp;&nbsp;  整个架设过程非常简单。<br>
&nbsp;&nbsp;&nbsp;  1、Red5提供了个常见操作系统的安装包，完全傻瓜式的安装，下一步下一步解决。<br>
&nbsp;&nbsp;&nbsp;  2、从OpenMeetings的网站（http://code.google.com/p/openmeetings/downloads/list）下载最新的Web应用，解压到Red5的webapps目录下（Red5内置Tomcat服务器）；<br>
&nbsp;&nbsp;&nbsp;  3、在OpenMeetings的web应用的install目录下修改hibernate.cfg.xml文件，将数据库配置到已创建的数据库（只需要创建数据库，不需要手工建表）；<br>
&nbsp;&nbsp;&nbsp;  4、重启Red5服务，加载OpenMettings应用；<br>
&nbsp;&nbsp;&nbsp;  5、打开浏览器输入http://localhost:5080/xmlcrm/Install(注意大小写，如果你修改了Red5的端口，将5080修 改成您指定的端口)；在现实的页面上点击&ldquo;Step 1&rdquo;开始OpenMeetings配置。需要注意的是邮件服务器必须正确的填写，否则无法进行用户注册，也就没有用户可以登录使用了。部署时还需要注意两 个工具的配置，一个是SWF工具（完成其它类型文档到swf的转换）和图形工具，这两个工具在配置页面上提供了下载地址（google so cool！），再输入工具地址的时候要以&quot;/&quot;结束。<br>
&nbsp;&nbsp;&nbsp;  6、上一步输入完成后点击&ldquo;send&rdquo;开始配置，这个配置的过程大概需要5--10分钟，不要以为应用死翘翘了:-)。<br>
&nbsp;&nbsp;&nbsp;  7、配置完成以后就可以登录使用了，enjoy it！<br>
<br>
后记：由于OpenMeetings默认的一个会议室只能4个人参加，不知道老外怎么想的。没办法，只能下载OpeenMeetings的源码作修改。 OpenMeetins的客户端源码是一个&ldquo;OpenLaszlo &rdquo;的应用，被逼无奈研究了一下OpenLaszlo ，感觉还算是个不错的RIA解决方案。放开人员的限制只需要修改videoconference\xmlcrm\content\conference\ roomlistItem.lzx文件的maxUsers变量的值就可以了；但是你会发现人员限制放开了，但是会议室里面的摄像头个数还是4个，怎么办？ 这个只需要修改一下videoconference\xmlcrm\content\conference\conference.lzx文件，参考原来 的摄像头布局，添加摄像头个数就可以了，不过摄像头个数确实不适合太多，因为摄像头一多数据流量会相当大，服务器压力太大，而且一般的视频会议也就是几个 领导+几个小兵，小兵就不用摄像头了嘛，乖乖的看和听就可以了。  <a href="http://hi.baidu.com/dyuan2008/blog/item/066d8c510ba8b710377abe55.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/066d8c510ba8b710377abe55.html#comment">查看评论</a>]]></description>
        <pubDate>2009年03月20日 星期五  22:09</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/066d8c510ba8b710377abe55.html</guid>
</item>

<item>
        <title><![CDATA[提示Can&#39;t load package:dclite70.bpl解决方法]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/c6fb95771204451cb051b9f1.html]]></link>
        <description><![CDATA[
		
		<div class="cnt" >
<p>win2003server SP2 + delphi7 ，在启动DELPHI时会提示Can't load package:dclite70.bpl，进入后打开Options时出现异常。<br>
解决方法：<br>
<br>
右击&ldquo;我的电脑&rdquo;。单击&ldquo;属性&rdquo;。<br>
在&ldquo;系统属性&rdquo;中单击&ldquo;高级&rdquo;。<br>
在&ldquo;性能&rdquo;中单击&ldquo;设置&rdquo;。<br>
在&ldquo;性能选项&rdquo;中单击&ldquo;数据执行保护&rdquo;。<br>
单击&ldquo;添加&rdquo;。选择Delphi7安装目录，然后到Bin目录下选择Delphi32.exe。<br>
应用重启DELPHI即可。</p>
<p><font color="#000000">全是Window2003的Data Execution Prevention（DEF数据执行保护）造成的。<br>
<br>
</font></p>
<div class="quote">
<div class="quote-title">引用</div>
<div class="quote-content">数据执行保护 (DEP) 是 Microsoft Windows XP Service Pack 2 (SP2) /Windows2003支持的一种处理器功能，它禁止在标记为数据存储的内存区域中执行代码。此功能也称作&ldquo;不执行&rdquo;和&ldquo;执行保护&rdquo;。当尝试运行标记的 数据页中的代码时，就会立即发生异常并禁止执行代码。这可以防止攻击者使用代码致使数据缓冲区溢出，然后执行该代码。数据执行保护 (DEP) 有助于防止病毒和其他安全威胁造成破坏，它们的攻击方法是从只有 Windows 和其他程序可以使用的内存位置执行恶意代码。</div>
</div>
<p>也就是说，这个DEF数据执行保护是MS为了防范其系统中不知哪处的漏洞而被攻击者利用来制造数据缓冲区溢出而达到攻击入侵的目的的。而默认是执行保护的，所以给Delphi7造成这个错误。</p>
</div> <a href="http://hi.baidu.com/dyuan2008/blog/item/c6fb95771204451cb051b9f1.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/c6fb95771204451cb051b9f1.html#comment">查看评论</a>]]></description>
        <pubDate>2009年02月23日 星期一  09:59</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/c6fb95771204451cb051b9f1.html</guid>
</item>

<item>
        <title><![CDATA[图像的二值化原理和实现（转）]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/805cfa5c21fa1a44faf2c024.html]]></link>
        <description><![CDATA[
		
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; "><span style="mso-fareast-"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">1、</font><span style="font: 7pt  Times New Roman ">  </span></font></span></span><span style=" mso-ascii- mso-hansi-"><font size="3">图像的二值化的基本原理</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 15.75pt; mso-char-indent-count: 1.5"><font size="3"><span style=" mso-ascii- mso-hansi-">图像的二值化处理就是讲图像上的<strong style="mso-bidi-font-weight: normal">点的灰度置为</strong></span><strong style="mso-bidi-font-weight: normal"><span><font face="Times New Roman">0</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style=" mso-ascii- mso-hansi-">或</span><span><font face="Times New Roman">255</font></span></strong><span style=" mso-ascii- mso-hansi-">，也就是讲整个图像呈现出明显的黑白效果。即将</span><span><font face="Times New Roman">256</font></span><span style=" mso-ascii- mso-hansi-">个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中，二值图像占有非常重要的地位，特别是在实用的图像处理中，以二值图像处理实现而构成的系统是很多的，要进行二值图像的处理与分析，首先要把灰度图像二值化，得到二值化图像，这样子有利于再对图像做进一步处理时，图像的集合性质只与像素值为</span><span><font face="Times New Roman">0</font></span><span style=" mso-ascii- mso-hansi-">或</span><span><font face="Times New Roman">255</font></span><span style=" mso-ascii- mso-hansi-">的点的位置有关，不再涉及像素的多级值，使处理变得简单，而且数据的处理和压缩量小。为了得到理想的二值图像，一般采用封闭、连通的边界定义不交叠的区域。<strong style="mso-bidi-font-weight: normal">所有灰度大于或等于阀值的像素被判定为属于特定物体，其灰度值为</strong></span><strong style="mso-bidi-font-weight: normal"><span><font face="Times New Roman">255</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style=" mso-ascii- mso-hansi-">表示，否则这些像素点被排除在物体区域以外，灰度值为</span><span><font face="Times New Roman">0</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style=" mso-ascii- mso-hansi-">，表示背景或者例外的物体区域。</span></strong><span style=" mso-ascii- mso-hansi-">如果某特定物体在内部有均匀一致的灰度值，并且其处在一个具有其他等级灰度值的均匀背景下，使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上（比如纹理不同），可以将这个差别特征转换为灰度的差别，然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; "><span style="mso-fareast-"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">2、</font><span style="font: 7pt  Times New Roman ">  </span></font></span></span><span style=" mso-ascii- mso-hansi-"><font size="3">图像的二值化的程序实现</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 15.75pt; mso-char-indent-count: 1.5"><font size="3"><span style=" mso-ascii- mso-hansi-">通过</span><span><font face="Times New Roman">Delphi</font></span><span style=" mso-ascii- mso-hansi-">刻度控件调整阀值，实现动态控制，程序如下：</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font face="Times New Roman" size="3">procedure TForm1.Button1Click(Sender: TObject);</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font face="Times New Roman" size="3">var</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p:PByteArray;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Gray,x,y:integer;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font face="Times New Roman" size="3">begin</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>TestBMP:=TBitmap.Create; changedbmp:=tbitmap.Create;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>testbmp.Assign(image1.Picture);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>for y:=0 to testbmp.Height-1 do</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>begin</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p:=testbmp.ScanLine[y];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>for x:=0 to testbmp.Width-1 do</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>begin</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><font size="3"><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //</span></font>首先将图像灰度化</span><span style="color: red"></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>gray:=round(p[x*3+2]*0.3+p[x*3+1]*0.59+p[x*3]*0.11);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><font size="3"><span><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>if gray&gt; TrackBar1.Position then <span style="color: red">//</span></font>按阀值进行二值化</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>begin</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p[x*3]:=255; p[x*3+1]:=255; p[x*3+2]:=255;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>end</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>else</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>begin</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p[x*3]:=0;p[x*3+1]:=0;p[x*3+2]:=0;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>end;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>end;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>end;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>ChangedBmp.Assign(TestBMP);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>PaintBox1.Canvas.CopyMode:=srccopy;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>PaintBox1.Canvas.Draw(0,0,ChangedBmp);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes"> </span>end;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; "><span style="mso-fareast-"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">3、</font><span style="font: 7pt  Times New Roman ">  </span></font></span></span><span style=" mso-ascii- mso-hansi-"><font size="3">处理的效果</font></span></p>
 <img height="137" src="http://p.blog.csdn.net/images/p_blog_csdn_net/chenamo9651/图像二值化.JPG" width="200"> <a href="http://hi.baidu.com/dyuan2008/blog/item/805cfa5c21fa1a44faf2c024.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/805cfa5c21fa1a44faf2c024.html#comment">查看评论</a>]]></description>
        <pubDate>2008年12月02日 星期二  20:36</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/805cfa5c21fa1a44faf2c024.html</guid>
</item>

<item>
        <title><![CDATA[图像的反色原理和实现(转)]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/43754f8d7eb67015b21bba24.html]]></link>
        <description><![CDATA[
		
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; "><span style="mso-fareast-"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">1、</font><span style="font: 7pt  Times New Roman ">  </span></font></span></span><span style=" mso-ascii- mso-hansi-"><font size="3">基本原理</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><font size="3"><span style=" mso-ascii- mso-hansi-">对于彩色图像的</span><span><font face="Times New Roman">R</font></span><span style=" mso-ascii- mso-hansi-">、</span><span><font face="Times New Roman">G</font></span><span style=" mso-ascii- mso-hansi-">、</span><span><font face="Times New Roman">B</font></span><span style=" mso-ascii- mso-hansi-">各彩色分量取反的技术就是图像的反色处理，这在处理二值化图像的连通区域选取的时候非常重要。如物体连通域用黑色表示，而二值化后的物体连通域图像可那是白色的，而背景是黑色的，这时应手动选取图像的反色处理或有程序根据背景和物体连通域两种颜色的数量所占比例而自动选择是否选择选取图像的反色处理。</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; "><span style="mso-fareast-"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">2、</font><span style="font: 7pt  Times New Roman ">  </span></font></span></span><span style=" mso-ascii- mso-hansi-"><font size="3">实现</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font face="Times New Roman" size="3">procedure TForm1.Button2Click(Sender: TObject);</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font face="Times New Roman" size="3">var</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p:PByteArray;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Gray,x,y:integer;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font face="Times New Roman" size="3">begin</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>self.FormDestroy(self);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>TestBMP:=TBitmap.Create;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>changedbmp:=tbitmap.Create;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>testbmp.Assign(image1.Picture);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>for y:=0 to testbmp.Height-1 do</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>begin</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p:=testbmp.ScanLine[y];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>for x:=0 to testbmp.Width-1 do</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>begin</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="color: red">p[x*3]:=not p[x*3];</span></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span style="color: red"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p[x*3+1]:=not p[x*3+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span style="color: red"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p[x*3+2]:=not p[x*3+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>end;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>end;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>ChangedBmp.Assign(TestBMP);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>PaintBox1.Canvas.CopyMode:=srccopy;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>PaintBox1.Canvas.Draw(0,0,ChangedBmp);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 31.5pt; mso-para-margin-left: 3.0gd"><span><font face="Times New Roman" size="3">end;</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; "><span style="mso-fareast-"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">3、</font><span style="font: 7pt  Times New Roman ">  </span></font></span></span><span style=" mso-ascii- mso-hansi-"><font size="3">效果</font></span></p>
 <img height="147" src="http://p.blog.csdn.net/images/p_blog_csdn_net/chenamo9651/图像反色.JPG" width="220" align="middle"> <a href="http://hi.baidu.com/dyuan2008/blog/item/43754f8d7eb67015b21bba24.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/43754f8d7eb67015b21bba24.html#comment">查看评论</a>]]></description>
        <pubDate>2008年12月02日 星期二  20:35</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/43754f8d7eb67015b21bba24.html</guid>
</item>

<item>
        <title><![CDATA[图像的滤波原理和实现(转)]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/9d42089b26fb12b2c8eaf45a.html]]></link>
        <description><![CDATA[
		
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1"><span><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">1、</font><span style="font: 7pt Times New Roman"> </span></font></span></span><span><font size="3">基本原理</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0"><span><font size="3">图像信息在采集过程中往往受到各种噪声源的干扰，这些噪声在图像上的常常表现为一些孤立像素点<strong style="mso-bidi-font-weight: normal">，这可理解为像素的灰度是空间相关的，即噪声点像素灰度与它们临近像素的灰度有着显著不同</strong>。通常，一般的前置图像处理后的图刺昂仍然带有后续所不希望夹带的孤立像素点，这种干扰或孤立像素点如不经过滤波处理，会对以后的图像区域分割、分析和判断带来影响。</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><span><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font></span></span><span>对受到噪声污染的图像可以采用线性滤波的方法来处理，但是很多线性滤波有低通性，在去噪声的同时也使得边缘模糊了，中值滤波在某些情况下可以做到既去除噪声又保护图像的边缘，他是一种非线性的去噪声的方法。</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><span><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font></span></span><strong style="mso-bidi-font-weight: normal"><span>中值滤波的实现原理是把数字图像中的一点的值用该点的一个区域的各个点的值的中值代替，</span></strong><span>中值的定义如下：</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0"><font size="3"><span>一组数</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">1</span></sub></font><span>、</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">2</span></sub></font><span>、</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">3</span></sub></font><span>…</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">n </span></sub></font><span>假如其排序如下：</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><font size="3"><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt"> i 1</span></sub></font><span style="mso-bidi-font-size: 10.5pt">≤</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt"> i 2</span></sub></font><span style="mso-bidi-font-size: 10.5pt">≤</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt"> i 3</span></sub></font><span style="mso-bidi-font-size: 10.5pt">≤</span><span>…</span><span style="mso-bidi-font-size: 10.5pt">≤</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt"> i n</span></sub></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman"><sub><span style="mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;  </span></span></sub><span>Y=Med{X</span><sub><span style="mso-bidi-font-size: 10.5pt">1</span></sub></font><span>、</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">2</span></sub></font><span>、</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">3</span></sub></font><span>…</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">n </span></sub><span>}=</span></font></font><span style="font-size: 18pt">X<sub>i((1+n)/2)<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span></sub></span><font size="3"><span><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>n</font></span><span>为奇数</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><span style="mso-spacerun: yes"><font face="Times New Roman" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font></span></span><span style="font-size: 18pt">X<sub>i(n/2) </sub></span><span><font size="3">＋</font></span><span style="font-size: 18pt">X<sub>i((1+n)/2)</sub></span><font size="3"><span><font face="Times New Roman"> <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>n</font></span><span>为偶数</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0"><font size="3"><span><font face="Times New Roman">Y</font></span><span>称为</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">1</span></sub></font><span>、</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">2</span></sub></font><span>、</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">3</span></sub></font><span>…</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">n </span></sub></font><span>的中值，如有一个序列（</span><span><font face="Times New Roman">10</font></span><span>，</span><span><font face="Times New Roman">20</font></span><span>，</span><span><font face="Times New Roman">30</font></span><span>，</span><span><font face="Times New Roman">40</font></span><span>，</span><span><font face="Times New Roman">50</font></span><span>，</span><span><font face="Times New Roman">60</font></span><span>，</span><span><font face="Times New Roman">70</font></span><span>），则中值为</span><span><font face="Times New Roman">40</font></span><span>。</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0"><font size="3"><span>把一个点的特定长度或形状的领域称为窗口，在一维的时候，中值滤波器是一个奇数各像素点的滑动窗口，窗口正中间的值用窗口内各个像素的中值代替。设输入为</span><font face="Times New Roman"><span>{X</span><sub><span style="mso-bidi-font-size: 10.5pt">i</span></sub><span>,i</span></font><span>∈</span><font face="Times New Roman"><span>I</span><sup><span style="mso-bidi-font-size: 10.5pt">2</span></sup><span>},</span></font><span>则滤波器的输出为：</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: center; mso-char-indent-count: 2.0" align="center"><font size="3"><font face="Times New Roman"><span>Y</span><sub><span style="mso-bidi-font-size: 10.5pt">i</span></sub><span>=med{X</span><sub><span style="mso-bidi-font-size: 10.5pt">i</span></sub><span>}=med{X</span><sub><span style="mso-bidi-font-size: 10.5pt">i-u</span></sub></font><span>…</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">u</span></sub></font><span>…</span><font face="Times New Roman"><span>X</span><sub><span style="mso-bidi-font-size: 10.5pt">i+u</span></sub><span>}</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0"><span><font size="3">如果推广到二维，则可以定义输出为：</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: center; mso-char-indent-count: 2.0" align="center"><font size="3"><font face="Times New Roman"><span>Y</span><sub><span style="mso-bidi-font-size: 10.5pt">i</span></sub><span>=med{X</span><sub><span style="mso-bidi-font-size: 10.5pt">ij</span></sub><span>}=med{X</span><sub><span style="mso-bidi-font-size: 10.5pt">(i+s),(j+s)</span></sub></font><span>(r,s)</span><span>∈<span>A,(i,j)</span>∈<span>I</span></span><sup><span style="mso-bidi-font-size: 10.5pt">2</span></sup><span><font face="Times New Roman"> }</font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0"><font size="3"><span>对于二维滤波的中值滤波，一般采用</span><span><font face="Times New Roman">3</font></span><span>×</span><span><font face="Times New Roman">3</font></span><span>或者</span><span><font face="Times New Roman">5</font></span><span>×</span><span><font face="Times New Roman">5</font></span><span>的窗口来进行滤波。</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1"><span><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">2、</font><span style="font: 7pt Times New Roman"> </span></font></span></span><span><font size="3">实现</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font face="Times New Roman" size="3">procedure TForm1.Button2Click(Sender: TObject);</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font face="Times New Roman" size="3">var</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p1,p2,p3,p4:pbytearray;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray:array[0..10] of integer;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>i,j:integer;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font face="Times New Roman" size="3">begin</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><font size="3"><span><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>self.DoubleBuffered:=true;<em style="mso-bidi-font-style: normal">//</em></font></span><em style="mso-bidi-font-style: normal"><span>采用双缓冲模式</span></em></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>ChangedBmp:=tbitmap.Create;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>testbmp:=tbitmap.Create;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>changedbmp.Assign(image1.Picture);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>testbmp.Assign(image1.Picture);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>for j:=1 to changedbmp.Height-2 do</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>begin</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p1:=testbmp.ScanLine[j];<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;  </span>p2:=testbmp.ScanLine[j-1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p3:=changedbmp.ScanLine[j]; p4:=changedbmp.ScanLine[j-1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>for i:=1 to changedbmp.Width-2 do</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>begin</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[0]:=p2[3*(i-1)+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[1]:=p2[3*i+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>Rvaluearray[2]:=p2[3*(i+1)+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[3]:=p3[3*(i-1)+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[4]:=p3[3*i+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[5]:=p3[3*(i+1)+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[6]:=p4[3*(i-1)+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Rvaluearray[7]:=p4[3*i+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[8]:=p4[3*(i+1)+2];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>sort(Rvaluearray);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p1[3*i+2]:=Rvaluearray[4];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[0]:=p2[3*(i-1)+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Rvaluearray[1]:=p2[3*i+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[2]:=p2[3*(i+1)+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[3]:=p3[3*(i-1)+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[4]:=p3[3*i+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[5]:=p3[3*(i+1)+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[6]:=p4[3*(i-1)+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[7]:=p4[3*i+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[8]:=p4[3*(i+1)+1];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>sort(Rvaluearray);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p1[3*i+1]:=Rvaluearray[4];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[0]:=p2[3*(i-1)];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[1]:=p2[3*i];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[2]:=p2[3*(i+1)];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[3]:=p3[3*(i-1)];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[4]:=p3[3*i];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[5]:=p3[3*(i+1)];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[6]:=p4[3*(i-1)];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[7]:=p4[3*i];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>Rvaluearray[8]:=p4[3*(i+1)];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>sort(Rvaluearray);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>p1[3*i]:=Rvaluearray[4];</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>end;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>end;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>ChangedBmp.Assign(TestBMP);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: -21pt; mso-char-indent-count: -2.0; mso-para-margin-left: 4.0gd"><span><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;  </span>PaintBox2.Canvas.CopyMode:=srccopy;<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span>PaintBox2.Canvas.Draw(0,0,ChangedBmp);<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font face="Times New Roman" size="3">end; </font></span>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1"><span><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">3、</font><span style="font: 7pt Times New Roman"> </span></font></span></span><span><font size="3">效果</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1" align="center"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1" align="center"> </p>
<span>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt"><span><font size="3">可能二值化处理后的图像的感觉不是很明显，但是彩色图像进行滤波后明显感觉图像清晰很多，主要原因是通过滤波后一些噪点消除了。</font></span></p>
</span></p>
<div forimg="1"><img class="blogimg" border="0" small="0" src="http://p.blog.csdn.net/images/p_blog_csdn_net/chenamo9651/图像滤波2.JPG">
<div forimg="1"><img class="blogimg" border="0" small="0" src="http://p.blog.csdn.net/images/p_blog_csdn_net/chenamo9651/图像滤波1.JPG"></div>
</div> <a href="http://hi.baidu.com/dyuan2008/blog/item/9d42089b26fb12b2c8eaf45a.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/9d42089b26fb12b2c8eaf45a.html#comment">查看评论</a>]]></description>
        <pubDate>2008年12月02日 星期二  20:33</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/9d42089b26fb12b2c8eaf45a.html</guid>
</item>

<item>
        <title><![CDATA[有没有能识别所有角度直线的hough变换delphi代码?]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/3043d9dd63a98ee877c63852.html]]></link>
        <description><![CDATA[
		
		procedure TForm2.Button16Click(Sender: TObject); <br>
var <br>
maxline:boolean; <br>
p: PByteArray; <br>
Gray, x, y,i,j,t,hh: Integer; <br>
Bmp: TBitmap; <br>
hougharray,hougharray2: array of array of longint; <br>
// hougharray:array[0..179,0..256*180] of longint; <br>
dis,r:longint; <br>
begin <br>
Bmp := TBitmap.Create; <br>
Bmp.Assign(Image3.Picture.Bitmap); <br>
//设置为24位真彩色 <br>
Bmp.PixelFormat := pf24Bit; <br>
// xMax:=Bmp.Width; <br>
// yMax:=Bmp.Height; <br>
hh:=strtoint(edit2.Text); <br>
dis:= round(sqrt(bmp.Width * bmp.Width +bmp.Height * bmp.Height )+0.5); <br>
setlength(hougharray,180,180*dis); <br>
setlength(hougharray2,180,180*dis); <br>
// for t := 0 to 179 do <br>
// for r := -180*dis+1 to 180*dis do <br>
// begin <br>
// hougharray[t][r]:=0; <br>
// end; <br>
for y := 0 to Bmp.Height - 1 do <br>
begin <br>
p := Bmp.scanline[y]; <br>
for x := 0 to Bmp.Width - 1 do <br>
begin <br>
//一个象素点三个字节 <br>
Gray := p[x * 3]; <br>
if gray &gt; 10 then //全局阀值 <br>
begin <br>
for t:=0 to 179 do <br>
begin <br>
r := round(((x*cos(t*3.14/180)+y*sin(t*3.14/180)))+0.5) ; <br>
if r &gt; 0 then <br>
hougharray[t][r]:=hougharray[t][r]+1 <br>
else <br>
hougharray2[t][-r]:=hougharray2[t][-r]+1; <br>
end; <br>
end; <br>
end; <br>
end; <br>
<br>
Bmp.Free; <br>
<br>
for t := 1 to 179 do <br>
for r := 0 to 180*dis do <br>
if (hougharray[t][r] &gt; hh) then <br>
begin <br>
maxline := true; <br>
for i := (t - 2) to (t + 2) do <br>
for j := (r - 2) to (r + 2) do <br>
if ((j &gt;= 0) and (j &lt; 180) and (i &gt;= 0) and (i &lt; 180) and (hougharray[i][j] &gt; hougharray[t][r])) then <br>
begin <br>
maxline := false; <br>
break; <br>
end; <br>
<br>
if (maxline = TRUE) then <br>
begin <br>
for x:=0 to image3.Width -1 do <br>
begin <br>
y:=round((r - x*cos(t*0.0174)) / sin(t*0.0174)); <br>
image3.Canvas.Pixels[x,y]:= clRed; <br>
end; <br>
end; <br>
end; <br>
<br>
<br>
for t := 1 to 179 do <br>
for r := -180*dis to 0 do <br>
if (hougharray2[t][-r] &gt; max(hh-20,0)) then <br>
begin <br>
maxline := true; <br>
for i := (t - 2) to (t + 2) do <br>
for j := (-r - 2) to (-r + 2) do <br>
if ((j &gt;= 0) and (j &lt; 180) and (i &gt;= 0) and (i &lt; 180) and (hougharray2[i][j] &gt; hougharray2[t][-r])) then <br>
begin <br>
maxline := false; <br>
break; <br>
end; <br>
<br>
if (maxline = TRUE) then <br>
begin <br>
for x:=0 to image3.Width -1 do <br>
begin <br>
y:=round((r - x*cos(t*0.0174)) / sin(t*0.0174)); <br>
image3.Canvas.Pixels[x,y]:= clRed; <br>
end; <br>
end; <br>
end; <br>
<br>
end; <a href="http://hi.baidu.com/dyuan2008/blog/item/3043d9dd63a98ee877c63852.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/3043d9dd63a98ee877c63852.html#comment">查看评论</a>]]></description>
        <pubDate>2008年11月12日 星期三  17:29</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/3043d9dd63a98ee877c63852.html</guid>
</item>

<item>
        <title><![CDATA[[转]突破百度贴吧的验证码限制]]></title>
        <link><![CDATA[http://hi.baidu.com/dyuan2008/blog/item/eba9b1b151b5575308230240.html]]></link>
        <description><![CDATA[
		
		<p> 百度，作为国内搜索引擎的大户，为了进一步扩大自己的用户群，专门开设了&ldquo;百度贴吧&rdquo;（2003年11月百度贴吧 (<a href="http://post.baidu.com/">http://post.baidu.com</a>)自从诞生以来逐渐成为世界最大的中文交流平台！当用户在百度搜索引擎中搜索出需要搜索的关键字，点击&ldquo;贴吧&rdquo;即可进入以关键字为专题的相应贴吧）的服务。操作简单而又针对性，这是贴吧火极一时的重要原因，可正因为如此，百度贴吧的安全性又怎么样呢？这就是我们今天探讨的话题！</p>
<p>&nbsp;&nbsp;&nbsp;  相信大家都有在论坛灌水的经历吧？但是如果你连续发表统一内容的东西在论坛中，不久论坛的整个板块就全是你发表的信息了，其他信息全被挤在了后面。假设你发表的信息够多，版主都删不完时，那么这个论坛基本就报废了！其他的商业论坛也意识到了防止恶意灌水的重要性，纷纷使用了一些防止恶意灌水的措施，有发贴间隔时间的限制、同一IP地址的发贴数限制、内容不能重复等，但是这些都不是今天的重点，由于百度使用的是一个公用发贴表单，允许匿名发帖，需要突破唯一的难点是验证码。（为了防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试或是防止不断提交某网络信息而采用的一种网络通行方式。随机生成字符信息放入图片中，防止计算机直接识别。比如招商银行的网上个人银行，腾讯的QQ社区等等）</p>
<p>&nbsp;&nbsp;&nbsp;  这时验证码在整个系统中就扮演了了一个至关重要的角色。如果我们能突破它，写一个自动发布的程序，那么我们来算一算：假设每两秒程序post一次，一分钟就是30次、 一小时就有30×60＝1800次、 一天就有1800×24＝43200次！如果我们把发贴程序或是密码穷举程序挂在很多肉鸡上，进行同时工作，那么结果可想而知！笔者曾亲目睹过国内某著名安全论坛就是验证码被人破解，导致被人恶意灌水，最后完全崩溃！当然还有某网络银行也因此类原因导致用户密码被盗等众多事件。笔者也作如下声明：下文介绍的方法并不是有意针某公司或是某机构，只是作为技术交流，如果部分读者利用本文介绍的方法进行破坏或是穷举他人密码，这已经违法了法律，那么责任由他自己承担，与笔者无关！</p>
<p>&nbsp;&nbsp;&nbsp;  好了，我们可以进入正题了（以下出现的代码为delphi写的部分源码，为了防止任意利用，我以介绍方法为主，如果读者感兴趣，可以自己组合编写完整，在本文附带的程序中，笔者提供了一个验证码参数确定程序（附源码））。验证码分为如下几类：数字型、字符型、符号型、综合型。</p>
<p>&nbsp;&nbsp;&nbsp;  我们看了看百度贴吧的验证码如图： 是属于数字型的！不过其图片中生成了不少彩色和黑白的噪音点（指验证图片上的斑点）。那么我们应该怎么去识别呢？传统的验证码识别方式很简单，由于数字的位置是固定的，所以我们只需要提取每一幅数字的图片（没有噪音点的）然后把每一个特殊数字独有的象素位置记录下来，然后在网络上提取需要破解的特征码，祛除噪音点，对其位置和记录位置进行比对，那就是么就能确定相应的数字了。</p>
<p>总结一下传统的就是： <br>
 <br>
1.先分析验证码,前景颜色是否不定 <br>
2.然后把验证码的宽度/验证码文字个数,比如一验证码下载后宽度为60,有4个数字,那么就60/4=15,然后保存每个字,如果只有数字保存0-9数字到位图文件,如果英文那更麻烦点,0-9,A-Z都要保存到位图,位图的前景色都不变,保持一种颜色,背景随便你改不改 <br>
3.如果前景要变则将文字统一为同种颜色,每个数字0-9的点阵都有个公共点,取该公共点颜色然后把前景全部统一成一种颜色,比如白色{255,255,255},位图的结构是BGR,而不是RGB <br>
4.然后进行比较,如果验证码的一点为白色,第2步保存的位图同一点也是白色,那么频率增加1 <br>
5.最后频率最高的就是验证码了! <br>
可是这种传统的识别方法却遇到了挑战！如果图片数字的位置也是随机出现，大小也是随机出现，那么这种识别方法也就失效了，百度贴吧的就是这样的验证码。 <br>
笔者这里向大家引入一个专有名词：&ldquo;hough变换&rdquo;也许学习计算机图像学的朋友知道，笔者还是简要介绍一下： <br>
直线hough变换：直线Hough变换利用图像空间和Hough参数空间的点－线对偶性，把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计，然后在Hough参数空间寻找累加器峰值的方法检测直线。例如，图1(a)中的九条线段对应于如图1(b)所示的其Hough参数空间的九个累加器峰值。图1(b)中，Hough参数空间的横纵坐标分别为直线极坐标方程:ρ＝x×cos(θ) + y×sin(θ) 的两个参数ρ和θ。九个峰值的ρ和θ值唯一的确定其对应线段所在直线的两个参数。并且线段的长度决定坐标(ρ,θ)处的累加值的大小。 <br>
1(a)  <br>
1(b) <br>
没有明白的读者可以多读两遍（数学啊数学！），还是比较好理解。</p>
<p><br>
其实讲通俗一点，就是我们只要利用这个方程ρ＝x×cos(θ) + y×sin(θ)统计出ρ出现的次数，就可以确定一条直线，比如说图片中我们计算出了某个方向（θ的大小）的ρ出现次数的最大值，那么这就是这个方向最长的直线了！ <br>
好了，知道了hough变换检测直线的原理，那么我们就来写段代码 <br>
var <br>
p: PByteArray; <br>
Gray, x, y,i1,i2: Integer; <br>
Bmp: TBitmap; <br>
begin <br>
listbox1.Clear; <br>
listbox2.Clear; <br>
Bmp := TBitmap.Create; <br>
Bmp.Assign(Image2.Picture.Bitmap); <br>
//设置为24位真彩色 <br>
Bmp.PixelFormat := pf24Bit; <br>
randomize; <br>
for y := 0 to Bmp.Height - 1 do <br>
begin <br>
p := Bmp.scanline[y]; <br>
for x := 0 to Bmp.Width - 1 do <br>
begin <br>
//一个象素点三个字节 <br>
Gray := Round(p[x * 3 + 2] * 0.3 + p[x * 3 + 1] * 0.59 + p[x <br>
* 3] * 0.11); <br>
if gray &gt; 128 then //全局阀值128 <br>
begin <br>
end <br>
else <br>
begin <br>
i1:=x;//表示检测的θ为0度 <br>
i2:=y; //表示检测的θ为90度 <br>
ListBox1.Items.Add(inttostr(i1));//用于日后算出现的次数，当然也可以用数组！ <br>
ListBox2.Items.Add(inttostr(i2)); <br>
end; <br>
end; <br>
end; <br>
Image2.Picture.Bitmap.Assign(Bmp); <br>
Bmp.Free; <br>
这段代码的意思就是检测图片0度和90度的直线。</p>
<p><br>
现在我们就说说具体操作了。先得到一幅验证码图片，这个得到的方法有很多，我建议用屏幕指定位置抓图来实现，然后保存成BMP格式，进行图像的二值化处理。二值化处理就是把图片转换成两种颜色，不过需要设置一个适当的阀值（由于24位图的一个点是由RGB3个颜色分量来控制，那么我们得到这3个分量的值后除以3就是阀值了），这样才能起到祛除部分噪音的效果。我们假设阀值为128 现在我们看看这段代码 <br>
var <br>
p: PByteArray; <br>
Gray, x, y: Integer; <br>
Bmp: TBitmap; <br>
begin <br>
Bmp := TBitmap.Create; <br>
Bmp.Assign(Image1.Picture.Bitmap); <br>
//设置为24位真彩色 <br>
Bmp.PixelFormat := pf24Bit; <br>
randomize; <br>
for y := 0 to Bmp.Height - 1 do <br>
begin <br>
p := Bmp.scanline[y]; <br>
for x := 0 to Bmp.Width - 1 do <br>
begin <br>
//一个象素点三个字节 <br>
Gray := Round(p[x * 3 + 2] * 0.3 + p[x * 3 + 1] * 0.59 + p[x <br>
* 3] * 0.11); <br>
if gray &gt; 128 then //全局阀值128 <br>
begin <br>
p[x * 3] := 255; <br>
p[x * 3 + 1] := 255; <br>
p[x * 3 + 2] := 255; <br>
end <br>
else <br>
begin <br>
p[x * 3] := 0; <br>
p[x * 3 + 1] := 0; <br>
p[x * 3 + 2] := 0; <br>
end; <br>
end; <br>
end; <br>
Image2.Picture.Bitmap.Assign(Bmp); <br>
Bmp.Free; <br>
这样我们就得到了一幅二值化的BMP。</p>
<p>得到这副图后，我们需要对图像进行分割，就是把它变成4个小位图，分别装入4个数字。分割算法很简单，因为验证码的数字位置左右跳动幅度不大，源代码就不再给出。</p>
<p>然后我们要做的就是把这副图进行几个方向的hough变换检测，由控制θ的角度来实现，比如说这个 这是数字3 我们可以看到它有什么特征没有？它横着由三横组成，竖着由2竖组成！我们就规定 如果横着有3条直线，竖着有两条直线，那么这个数就是3了！所以我们只要用hough算子检测 0 &amp; 90 度就能确定横竖有多少直线了，再看这个 这是数字1 我们就规定竖有一条最长的直线，然而横的直线如果不超过竖直线长的1/2那么就是1了。其他数以此类推！</p>
<p>当然实际操作当然没有这么简单，因为还是有部分噪音点没有祛除干净，但是这的确说明了我们的思想！所以每个数有需要准备几套特征编码，如果出现多个数，就看使用编码数最多的数就是我们要识别的数了。最后就是统计了，统计函数我们现在给出<br>
 <br>
function Repeatcount(s:string;d:string):integer; <br>
var i:integer; <br>
begin <br>
i:=0; <br>
while pos(d,s)&gt;0 do <br>
begin <br>
i:=i+1; <br>
delete(s,pos(d,s),length(d)); <br>
end; <br>
result:=i; <br>
end; <br>
利用这个函数，我们就可以确定出现最多的p的次数以及使用编码最多的次数了！笔者随文附送了一个检测0度和90度的检测器，读者可以多试几次就明白了！（如图）</p>
<p>当然只有这两度检测是远远不够的，实际应用中，可以使用0～90度中任意一度检测，比如说7，它的竖由于不是90度的（直的）所以要用其他的度数来检测！ 这里也总结一下,任意数字，只要我们能得到相应的特征，那么我们就可以对它进行识别！</p>
<p>总结一下创新的： <br>
1、 获得图片，进行二值化的变换、祛除噪音。 <br>
2、 分割图像，保存成相应的BMP文件。 <br>
3、 对其进行几个方向的HOUGH变换检测，根据相应的验证码来定！ <br>
（你也可以做更多的检测，比如有英文字母就需用到其他算法了！） <br>
4、 对特征进行统计，得出识别结果。</p>
<p>接下来要做的就是做个post程序了，这个太简单了，代码你就自己写吧！不过也要做到如下细节:做成多线程程序进行发贴，不然程序会失去响应的。最好是可以导入大量的代理IP的，然后就是发贴的内容最后加上几个随机字符，这样可以防止重复贴的过滤！最重要的，只是做测试，发贴量不要太多、不要乱发广告贴！</p>
<p>所以说再安全的验证码也有软肋，我们只要发现就可以找出其中的漏洞！当然不只是针对百度，其他论坛的特征码同样能识别！当然网络安全技术也是双刃剑，我这里再次强调！这种方法的确能识别很多重要的部门的一些关键验证码，但是读者如果使用其方法进行破坏，那已经违反了中华人民共和国的相关法律，是要付刑事责任的！并且与笔者无关！</p>
<p>其实上述方法已经不是只是对验证码进行识别了，完全可以用到现实生活中去，比如说手写体识别、车牌识别等等，但是现实生活中我们还要进行更多的加工，比如说圆形检测，多边形检测等等。所以说从网络安全技术中，也有很多东西能造福社会，还等待我们继续创造！</p>
<p> </p>
<p>该文章转自[雨哲在线]：<a href="http://www.yz81.com/?ArticleID=1847">http://www.yz81.com/?ArticleID=1847</a></p> <a href="http://hi.baidu.com/dyuan2008/blog/item/eba9b1b151b5575308230240.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/dyuan2008/blog/category/%BC%BC%CA%F5">技术</a>&nbsp;<a href="http://hi.baidu.com/dyuan2008/blog/item/eba9b1b151b5575308230240.html#comment">查看评论</a>]]></description>
        <pubDate>2008年11月12日 星期三  16:57</pubDate>
        <category><![CDATA[技术]]></category>
        <author><![CDATA[dyuan]]></author>
		<guid>http://hi.baidu.com/dyuan2008/blog/item/eba9b1b151b5575308230240.html</guid>
</item>


</channel>
</rss>