<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_在别处</title><subtitle type="text">生命在于运动，生活在于折腾。</subtitle><id>http://feed.cnblogs.com/blog/u/26493/rss</id><updated>2011-11-25T05:25:36Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/26493/rss"/><entry><id>http://www.cnblogs.com/yimi329/archive/2011/11/25/2263096.html</id><title type="text">【技术原创】如何在Winform程序中播放视频及实现播放列表</title><summary type="text">写在前面： 此文章主要讨论了如何在Winform下播放视频及视频的列表播放，此方法已经在公司的产品项目中使用超过半年，现公开与大家讨论，欢迎参与。 原文章同时发布在了本人独立博客：在Winform中播放视频等【DotNet，C#】 在项目中遇到过这样的问题，就是如何在Winform中播放视频。当时考察了几种方式，第一种是直接使用Windows Media Player组件，这种最简单；第二种是利用DirectX直接在窗体或者控件上绘图，这种比较复杂。于是采用的是第一种方法。 先从VS的工具箱里添加Windows Media Player组件，方式是打开工具箱，在最下面的空白处点击右...</summary><published>2011-11-25T05:25:00Z</published><updated>2011-11-25T05:25:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2011/11/25/2263096.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2011/11/25/2263096.html"/><content type="html">&lt;blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"&gt;&lt;p&gt;写在前面：&lt;/p&gt;&lt;p&gt;此文章主要讨论了如何在Winform下播放视频及视频的列表播放，&lt;strong&gt;此方法已经在公司的产品项目中使用超过半年&lt;/strong&gt;，现公开与大家讨论，欢迎参与。&lt;/p&gt;&lt;p&gt;原文章同时发布在了本人独立博客：&lt;strong&gt;&lt;a href="http://www.zaibc.com/programming/play-video-in-dotnet-winform.html" target="_blank"&gt;在Winform中播放视频等【DotNet，C#】&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;在项目中遇到过这样的问题，就是如何在Winform中播放视频。当时考察了几种方式，第一种是直接使用Windows Media Player组件，这种最简单；第二种是利用DirectX直接在窗体或者控件上绘图，这种比较复杂。于是采用的是第一种方法。&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;先从VS的工具箱里添加Windows Media Player组件，方式是打开工具箱，在最下面的空白处点击右键，选择项，然后在弹出的对话框里切换到Com组件标签项，找到&amp;#8220;Windows Media Player&amp;#8221;项并选中，确定后将在工具箱中看到多出一个图标，然后就可以将这个图标拖到窗体上进行设置了。&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;在这里主要讲下，设置Windows Media Player组件时，有个属性是&amp;#8220;无窗口播放&amp;#8221;，如果不启用的话，在视频播放时点击鼠标的话，视频会切换到全屏状态，启用就不会发生。但启用的话，视频的清晰度会下降很多（颗粒感变得很明显），不启用鼠标点击又会放大。最初我采用定时将全屏属性改为False来实现，时钟设置成100毫秒或者更小，表现出来的就是用户双击视频后，屏蔽忽地一下变大然后又恢复原样，更危险的是此操作有一定机率（而且不低）会将XP的任务栏暴露出来（因为我们的终端是要全屏显示，不能让用户看到桌面及其它操作项的），于是我反复测试，最终采用的另外一种方式，即过滤窗体事件来直接屏蔽掉视频区域的鼠标消息。具体实现如下：&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;先定义一个消息过滤类，用来屏蔽指定区域的鼠标双击或者单击消息。然后在应用程序中加载此过滤器即可实现屏蔽消息功能。&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;public class MessageFilterMgr : IMessageFilter&amp;nbsp;&lt;br /&gt;{&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rectangle Rect;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public MessageFilterMgr(Rectangle rect)&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rect = rect;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;public void Start()&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.AddMessageFilter(this);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;public void Stop()&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.RemoveMessageFilter(this);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;public bool PreFilterMessage(ref System.Windows.Forms.Message SystemMessage)&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SystemMessage.Msg &amp;gt;= 513 &amp;amp;&amp;amp; SystemMessage.Msg &amp;lt;= 515) //513|515是对应目标消息的值&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Control.MousePosition.Y &amp;gt; Rect.Y &amp;amp;&amp;amp; Control.MousePosition.Y &amp;lt; Rect.Y + Rect.Height&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp; Control.MousePosition.X &amp;gt; Rect.X &amp;amp;&amp;amp; Control.MousePosition.X &amp;lt; Rect.X + Rect.Width)&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false; //响应则为false&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&lt;br /&gt;}&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;鼠标点击问题已经解决，现在剩下最后一个问题了，就是如何实现视频连续播放功能。开始我使用Window Media Player的状态改变事件来控制，即当播放器的状态改变时，发现它是停止状态，马上发送播放下一个视频的指令，此种方法控制比较繁琐，视频之间停顿时间有点长（大约0.4秒的样子）。后来改为使用播放列表，直接定义播放列表让其自动循环播放。实现如下：&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;this.Player.settings.setMode("loop", true);&amp;nbsp; // 将播放列表设置为循环播放&amp;nbsp;&lt;br /&gt;foreach (string item in this.Videos)&amp;nbsp;&lt;br /&gt;{&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Player.currentPlaylist.appendItem(this.Player.newMedia(item));&amp;nbsp; // 将视频逐个添加至播放列表&amp;nbsp;&lt;br /&gt;}&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;最后，我们的终端又要实现视频与图片混合播放功能，即视频播放完毕后再播放图片，我也将实现方式归纳如下：&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;在启动时取消将播放列表的循环播放；&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;继续利用播放组件的状态改变事件，当播放器的状态为wmppsReady（当播放列表中视频数量大于1时）或者wmppsStopped（当播放列表中只有一个视频时）时，表示播放已经完毕，然后将播放组件隐藏，再启用图片自动切换程序，等图片切换完后，再将播放组件显示，启用播放。&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; line-height: 20px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 另，默认状态下，Windows Media Player支持的视频格式很有限（最佳之选是WMV），想要支持更多的视频格式，只能通过安装视频解码器来实现。&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yimi329/aggbug/2263096.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yimi329/archive/2011/11/25/2263096.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yimi329/archive/2011/11/25/2263072.html</id><title type="text">【程序打包压缩】使用NetZ打包你的软件：附原创小工具下载</title><summary type="text">最近项目里面需要这样的需求，即将项目里过多的库合并，让客户端看起来瘦一点，于是在网上找了不少资料，最初是看到ILMerge软件，它是由微软内部员工开发，能将使用.Net开发的程序合并在一起，但它有个缺点是对COM组件处理不大友好，程序若引用了COM组件，而这些COM组件若使用了其它COM组件，需要一并合并才会成功，否则程序无法运行。而且程序引用的库需要全部添加才能生成成功，可以说使用起来不是很理想。 后来又找到一款合并软件，NetZ，开源项目。它比ILMerge多个功能，就是能混淆和压缩代码，而且它的限制比较少，你想压缩哪些库就压缩哪些库，不会出现失败信息。对COM组件支持得也比较...</summary><published>2011-11-25T05:05:00Z</published><updated>2011-11-25T05:05:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2011/11/25/2263072.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2011/11/25/2263072.html"/><content type="html">&lt;div&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;最近项目里面需要这样的需求，即将项目里过多的库合并，让客户端看起来瘦一点，于是在网上找了不少资料，最初是看到ILMerge软件，它是由微软内部员工开发，能将使用.Net开发的程序合并在一起，但它有个缺点是对COM组件处理不大友好，程序若引用了COM组件，而这些COM组件若使用了其它COM组件，需要一并合并才会成功，否则程序无法运行。而且程序引用的库需要全部添加才能生成成功，可以说使用起来不是很理想。&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.zaibc.com/wp-content/uploads/2011/04/NetZGUI_thumb1.png" width="213" height="245" alt="" /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;后来又找到一款合并软件，&lt;a href="http://madebits.com/netz" target="_blank" style="text-decoration: none; color: #0044aa; "&gt;NetZ&lt;/a&gt;，开源项目。它比ILMerge多个功能，就是能混淆和压缩代码，而且它的限制比较少，你想压缩哪些库就压缩哪些库，不会出现失败信息。对COM组件支持得也比较理想，至少我用AxInterop.WMPLib和Interop.WMPLib均可成功合并，但System.Data.SQLite和刷卡模块等失败，尚未找出可行方案（有找到的也可以跟我联系）。为了方便起见，就在此软件的基础上做了一个可视化压缩工具（NetZ是命令行式，没有界面），软件环境是.net framework2.0及以上，NetZ目前支持最高3.5版本的压缩混淆合并（后续若出现更高版本，可自行更新软件目录下的NetZ文件夹内容）。&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;软件的原理是根据你的选择，帮你生成NetZ的命令行，然后去调用，这样就可以压缩混淆和合并了。操作方法：&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;1.选择你要压缩的主程序，Exe文件&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;2.选择一个输出位置，用来放置压缩好的文件&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;3.选择你需要同时压缩的引用库，可以不加&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;4.点击开始压缩后，待程序压缩完毕，会自动弹出文件夹，指向生成文件位置&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;下载&lt;a href="http://www.zaibc.com/wp-content/uploads/2011/04/NetZ-GUI-1.0.zip" style="text-decoration: none; color: #0044aa; "&gt;NetZ-GUI-1.0&lt;/a&gt;。&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;另附NetZ命令解释（摘自&lt;a href="http://www.qimao.cn/article.asp?id=225" style="text-decoration: none; color: #0044aa; "&gt;奇猫居-神游天地间&lt;/a&gt;）：&lt;/p&gt;&lt;blockquote style="margin-right: 10px; margin-left: 10px; padding-top: 10px; padding-bottom: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: #e6e6e6; border-right-color: #e6e6e6; border-bottom-color: #e6e6e6; border-left-color: #e6e6e6; background-image: initial; background-color: #fafafa; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; line-height: normal; "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; "&gt;如果要压缩一个EXE程序，只需要执行：&lt;br /&gt;netz app.exe （这样会产生一个zip.dll 文件）&lt;br /&gt;如果要去除这个dll文件，可以执行：&lt;br /&gt;netz -z app.exe&lt;br /&gt;如果要指定图标，可以执行：&lt;br /&gt;netz app.exe -i app.ico&lt;br /&gt;如果要指定版本，使用-n参数&lt;br /&gt;如果程序是控制台程序，需要执行：&lt;br /&gt;netz -c app.exe&lt;br /&gt;如果要压缩exe文件和dll文件，可以执行：&lt;br /&gt;netz app.exe lib1.dll lib2.dll&lt;br /&gt;产生一个exe类型的单文件，可以执行：（也会产生一个zip.dll文件，要去除这个文件可以使用-z参数）&lt;br /&gt;netz -s app.exe lib1.dll lib2.dll&lt;br /&gt;netz -s -z app.exe lib1.dll -so（一般使用这几组命令生成一个单文件）&lt;br /&gt;前题：把您的程序放在netz目录下，或者在 netz命令时，指定目录&lt;br /&gt;例：netz -s -z D:\原创软件\QiMao_cn.exe D:\原创软件\XPTable.dll -so&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;原文章发表在我的独立博客：&amp;nbsp;&lt;a href="http://www.zaibc.com/programming/my-software-for-dotnet-compress-merge-and-garble.html" target="_blank"&gt;捣鼓了一个程序压缩合并混淆小软件【附下载】&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/yimi329/aggbug/2263072.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yimi329/archive/2011/11/25/2263072.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yimi329/archive/2011/11/18/2253629.html</id><title type="text">【技术原创】京东商城价格图片分析解析源代码下载（C#），附演示程序</title><summary type="text">前阵子研究过京东商城的价格图片采集算法，并在《【技术原创】探讨一下京东商城价格图片解析算法的优化，附演示程序下载》一文中详细阐述了这个算法的来源及推理过程，随后我又将自己演示的程序上传供大家下载。今天我就关于京东价格采集分析这块，将C#写的源代码向大家免费开放，希望能对大家有所帮助，同时也希望大家尊重本人的劳动成果，在项目中使用的时候尽量保留代码头部标示的出处。 此图片解析算法理论上是京东价格图片解析速度最快的了（当然不包括下载图片），不知道有没有朋友有比这个还快的思路或者实现Demo，有的话可以在这里交流一下。 下面就是演示程序的截图： 这两天呢，我又将代码整理了一下，将算法部分单独...</summary><published>2011-11-18T02:31:00Z</published><updated>2011-11-18T02:31:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2011/11/18/2253629.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2011/11/18/2253629.html"/><content type="html">&lt;div&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;前阵子研究过京东商城的价格图片采集算法，并在《&lt;a href="http://www.zaibc.com/it/the-analysis-of-algorithm-about-image-recognition.html" target="_blank" style="text-decoration: none; color: #0044aa; "&gt;【技术原创】探讨一下京东商城价格图片解析算法的优化，附演示程序下载&lt;/a&gt;》一文中详细阐述了这个算法的来源及推理过程，随后我又将自己演示的程序上传供大家下载。今天我就关于京东价格采集分析这块，将C#写的源代码向大家免费开放，希望能对大家有所帮助，同时也希望大家尊重本人的劳动成果，在项目中使用的时候尽量保留代码头部标示的出处。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt; color: red; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;此图片解析算法理论上是京东价格图片解析速度最快的了&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; "&gt;（当然不包括下载图片）&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; "&gt;，不知道有没有朋友有比这个还快的思路或者实现Demo，有的话可以在这里交流一下。&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;下面就是演示程序的截图：&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;&lt;a href="http://www.zaibc.com/wp-content/uploads/2011/10/image7.png" style="text-decoration: none; color: #0044aa; "&gt;&lt;img title="image" border="0" alt="image" src="http://www.zaibc.com/wp-content/uploads/2011/10/image_thumb7.png" width="516" height="317" style="border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-width: initial; border-color: initial; max-width: 600px; display: inline; " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;这两天呢，我又将代码整理了一下，将算法部分单独弄到一个项目里，使其成为DLL以供其它项目使用。其中SpiderHtml是根据商品页面的HTML代码采集价格类，它提供了两种方法：根据商品地址或根据商品页面HTML采集价格；SpiderImg是根据商品价格图片分析出价格，它同样也提供了两种方法：根据商品的ID或根据商品价格图片解析价格。HTML方式和图片方式各有各的优缺点，前者使用正则表达式直接找出价格，但容易被京东发现短时间内连续访问页面，可能会被屏蔽掉；后者不访问页面直接下载商品价格图片，并采用了性价比相当高的算法快速解析出商品价格（大家可以看到上图中，解析39个价格，比对了1115次，平均每个价格图片比对了不到29次，也就是说每张图片大约采集29个像素点即可以解析出图片上的所有数字）。&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;若想更安全地，高正确率地使用此接口，建议同时使用两种方案，即使用HTML方式采集价格后，也要通过图片方式再验证一下，只有两者相等再确定（经本人实验表明，采集了相当量的数据后，并未发现有解析错的地方）。&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;源代码下载地址：&lt;a href="http://www.zaibc.com/download/JingDongInterface.zip" target="_blank" style="text-decoration: none; color: #0044aa; "&gt;JingDongInterface.zip&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 20px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; "&gt;演示程序下载地址：&lt;a href="http://www.zaibc.com/download/JingDongInterfaceExe.zip" target="_blank" style="text-decoration: none; color: #0044aa; "&gt;JingDongInterfaceExe.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;注：此文章最初发布在我的个人独立博客（&lt;a href="http://www.zaibc.com/programming/the-source-code-of-csharp-for-jing-dong-price-interface.html"&gt;源地址&lt;/a&gt;），现在转到园子里拿来供大家讨论分享。&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/yimi329/aggbug/2253629.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yimi329/archive/2011/11/18/2253629.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yimi329/archive/2011/11/15/2249658.html</id><title type="text">【技术原创】探讨一下京东商城价格图片解析算法的优化，附演示程序下载</title><summary type="text">以下是我发布在个人独立博客的原创技术文章（源地址），放到园子里来供大家讨论。 发现咱博客开启后技术性的文章写的并不多，这貌似违背当时的初衷啊。文章不多并不表示咱一直都闲着，尤其是在技术方面咱是因为太忙了才没时间写一写，总结总结的。今晚趁还有些精力赶紧将前段日子自己捣鼓的小东西（之一）给大家分享一下。 前不久我不是扬言说要做两款小软件么，这次我们说到的话题就跟这个有关。我说的那个软件之一就是京东商城的相关软件--我想抓取价格做分析（京东不会提供这个接口），我相信这个肯定是对大家有所帮助的。京东商城的价格展示方式，除了书籍外，基本上都是通过图片来展示的--这个好处是防止有人过于轻易地抓取到...</summary><published>2011-11-15T06:08:00Z</published><updated>2011-11-15T06:08:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2011/11/15/2249658.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2011/11/15/2249658.html"/><content type="html">&lt;div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;以下是我发布在个人独立博客的原创技术文章（&lt;a href="http://www.zaibc.com/it/the-analysis-of-algorithm-about-image-recognition.html"&gt;源地址&lt;/a&gt;），放到园子里来供大家讨论。&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;发现咱博客开启后技术性的文章写的并不多，这貌似违背当时的初衷啊。文章不多并不表示咱一直都闲着，尤其是在技术方面咱是因为太忙了才没时间写一写，总结总结的。今晚趁还有些精力赶紧将前段日子自己捣鼓的小东西（之一）给大家分享一下。&lt;/p&gt;&#xD;
&lt;p&gt;前不久我不是扬言说要做两款小软件么，这次我们说到的话题就跟这个有关。我说的那个软件之一就是京东商城的相关软件--我想抓取价格做分析（京东不会提供这个接口），我相信这个肯定是对大家有所帮助的。京东商城的价格展示方式，除了书籍外，基本上都是通过图片来展示的--这个好处是防止有人过于轻易地抓取到价格信息。于是咱想准确地获取到价格的话就只能老实地分析图片喽（其实有的页面里，比如列表页面商品价格是有字符串表示形式的，但那个只用于无目标采集时有用，要是关注某个商品价格变动情况的话，作用就不大了，所以咱无法避免图像分析这一步）。&lt;/p&gt;&#xD;
&lt;p&gt;图片分析一般有两种思路，一种是与样本库对比，这种方法简单有效，缺点是适应性较差，样本可能要跟着图片不停地变动；另一种就是形状分析，也就是判断图片中数字的形状来判断是哪个字，这种方法效率比前者低，但适应性强；以前我在看验证码识别相关文章时还找到过这种算法，但眼下要用的时候就再也找不着了，方便起见咱也只能用第一种，也就是样本库的方法识别了。&lt;/p&gt;&#xD;
&lt;p&gt;这里我要先插播一下，之所以我能采取样本库的算法，是因为京东商城的价格显示很有特点（希望京东商城的人看到后表改掉哦，否则我又得重新找算法了），就是几个数字拼在一起然后再随机绘制了一条细线挡了一下，其中0~9这9个数字的字体样式和大小是始终不变的，也就是我们能将价格图片分割成单独的数字，然后去掉无效的坐标（也就是被细线挡住的部分），就创造了样本库对比的先前基础了。&lt;/p&gt;&#xD;
&lt;p&gt;样本库对比如何做呢，最简单来讲，我们拿到一串数字，首先要把每个数字独立分割开来，图片中有几个数字就分割成几张图片，然后再针对每个图片进行分析处理。这样我们就需要针对每个数字建立一个样本，然后分析时将每个分割出来的图片与样本采集的点进行对比，命中最高的数字就是我们要的答案喽，但按实际运行效率来看，这种做法并不高效。假设我们每个数字图片采集8个点做样本，这样的话每个图片要比对10次（0~9每个数字一次），然后找出配对率最高的作为最终结果。事实上我这样做的结果也有很高的出错率（大概在5%的样子），为什么呢，因为8和0很像，3和8很像，6和8也很像，这样如果样本正好挡住关键位置或者其它位置使两者匹配点相等或者非正确值大于正确值的数量，这就使结果出错。说简单一点就是本来是要匹配8的，但如果正好8中间的点被划线了，很可能就被判断为3。想要提高准确率只能加大样本库，最后我将样本库加大到极限，也就是整个数字的所有像素都做样本比对，发现还是不能保证百分百识别正确。这种做法显然行不通。&lt;/p&gt;&#xD;
&lt;p&gt;上面的样本库对比有些死板，因为他非要一个一个去对比，等对比完了找匹配数量最高的为最终结果，效率不高，可信度也不高。后来我就想有没有更好的样本库算法呢，我就从尽量减少比对次数上考虑，发现我们可以这样去判断：我们先去找带有个性的数字的特征，然后以此为基础否决或者确定一个个的数字，最终就能得到我们想要的结果。具体怎么说呢，就是我先找出0~9这9个数字，也就是9张图片中每个数字独具的特色（比如说1号数字，只有它这里在坐标（7，1）处是白色，只有它在坐标（3，4）处是红色），写这样一个算法计算每个数字的特色并不复杂，于是我很轻松地就把样本库统计出来了：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;1:W(7,1), R(5,2), R(6,3), R(5,4), R(6,4), R(6,9) &lt;br /&gt;&#xD;
2:R(3,9), R(1,11), R(9,11) &lt;br /&gt;&#xD;
4:W(5,1), W(6,1), R(4,4), R(3,8), R(7,8), R(10,8), W(3,11), W(4,11) &lt;br /&gt;&#xD;
5:R(3,4) &lt;br /&gt;&#xD;
7:R(1,1), R(9,2), R(4,10) &lt;br /&gt;&#xD;
9:R(4,7)&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;解释一下上面表示的意思：第一个数字表示数字几的对比结果，W表示白色，R表示红色，第一行表示：只有数字1，才会在坐标（7，1）处出现白色，才会在坐标（5，2）处出现红色，才会在&amp;#8230;&amp;#8230;这样我们就可以根据这些特征值直接判断是否是当前这个数字。考虑到有时特征值正好被细线经过成为无效数据（即不是W也不是R），每个数字要有至少三个不在同一条线上的点才能保证能被准确判断（是或者不是）。比如1这个数字，在坐标（7，1）处正好是无效点，（6，3）也是无效，那（5，4）跟前两者不在一条线上，就不大可能也无效了（除非京东价格图片改划曲线了），也就是说有这三个点作为依据，肯定能判断此数字是不是1了。根据这个理论，数字1、2、4、7能保证被正确识别，5，9则需要进一步验证。&lt;/p&gt;&#xD;
&lt;p&gt;上面已经解决了至少有三个独特的点的数字识别问题，接下来我们就考虑5、9以及剩下的数字如何识别的问题。其实按我们的思路，前面已经可以准确识别数字1、2、4、7了，那么也就是说我们若到此时还没判断出数字是多少，但我们已经坚决否定了前面四个数字，那样的话，两个数字共享的特征，就可能有准确的判断结果了---因为其中一个已经有结果了嘛。于是我们再将与其它数字共享一个特征的数字找出来：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;0:R(9,5)-9, R(1,6)-6, W(7,6)-1, R(9,6)-9 &lt;br /&gt;&#xD;
1:W(4,1)-4, R(4,2)-6, R(6,2)-4, R(5,3)-4, W(7,6)-0, R(5,9)-7, R(5,10)-7, R(6,10)-9 &lt;br /&gt;&#xD;
2:R(1,2)-3, R(4,8)-4, R(4,9)-7 &lt;br /&gt;&#xD;
3:R(1,2)-2, R(4,6)-8, R(1,10)-5 &lt;br /&gt;&#xD;
4:W(4,1)-1, R(6,2)-1, R(5,3)-1, R(7,3)-7, R(7,4)-7, R(4,8)-2, R(7,9)-9, W(5,11)-7, W(6,11)-7 &lt;br /&gt;&#xD;
5:R(9,1)-7, R(3,3)-6, R(4,5)-6, R(1,10)-3 &lt;br /&gt;&#xD;
6:R(4,2)-1, R(3,3)-5, R(4,5)-5, R(1,6)-0 &lt;br /&gt;&#xD;
7:R(9,1)-5, R(7,3)-4, R(7,4)-4, R(4,9)-2, R(5,9)-1, R(5,10)-1, W(5,11)-4, W(6,11)-4, W(7,11)-9 &lt;br /&gt;&#xD;
8:R(4,6)-3, R(3,7)-9 &lt;br /&gt;&#xD;
9:R(9,5)-0, R(9,6)-0, R(3,7)-8, R(7,9)-4, R(6,10)-1, W(7,11)-7&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;上面第一行的意思是：数字0的共享特征是，它与数字9在坐标（9，5）上都是红色的，与数字6在坐标（1，6）上都是红色的，与数字1&amp;#8230;&amp;#8230; 依次往下，就形成了上面这张表。我们能得到什么呢，首先我们能判断1、2、4、7，如果成功了就是四者之一了，否则我们看共享表中数字1的特征，为什么这么看呢，因为前面的数字都被否决了，那么这些数字对应的共享特征表里的坐标，就变成了&amp;#8220;独享&amp;#8221;的。如数字1与数字6共享R（4，2），当否决了数字1时，那么R（4，2）这个条件就可以来直接判断是否是数字6。归纳一下，也就是说前面已经否决的数字，其共享的特征则成为另一方独享的特征（说得比较绕口），归纳算法如下：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;1:W(7,1), R(5,2), R(6,3), R(5,4), R(6,4), R(6,9) &lt;br /&gt;&#xD;
2:R(3,9), R(1,11), R(9,11) &lt;br /&gt;&#xD;
7:R(1,1), R(9,2), R(4,10) &lt;br /&gt;&#xD;
4:W(5,1), W(6,1), R(4,4), R(3,8), R(7,8), R(10,8), W(3,11), W(4,11) &lt;br /&gt;&#xD;
9:R(4,7), R(7,9)|4, R(6,10)|1, W(7,11)|7 &lt;br /&gt;&#xD;
0:R(9,5)|9, W(7,6)|1, R(9,6)|9 &lt;br /&gt;&#xD;
5:R(3,4), R(9,1)|7, R(3,3)|6, R(1,10)|3, R(4,5)|6 &lt;br /&gt;&#xD;
6:R(4,2)|1, R(3,3)|5, R(4,5)|5, R(1,6)|0 &lt;br /&gt;&#xD;
3:R(1,2)|2, R(4,6)|8, R(1,10)|5 &lt;br /&gt;&#xD;
8:R(4,6)|3, R(3,7)|9&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;上面便是最后算法依据的推导公式了，我来给大家解释一下：&lt;/p&gt;&#xD;
&lt;p&gt;算法每行可断定某一个数字（成立或者不成立），第1行表示数字1的判断成立条件（也就是数字1的独享特征），本来三个就足够，我这里顺便将它的6个特征全部列上了；算法依次判断下去，直到判断条件成立，便找到当前数字；&lt;/p&gt;&#xD;
&lt;p&gt;前四行不用多说，1、2、4、7列举的都是独享的特征，能一次性判断是否成立；第5行，也就是数字9的判断特征里写，第一个是R（4，7）独享特征，第二个是R（7，9）|4，表示与数字4共享的特征（如果判断到这一步了已经表示前面第四行的4已经被否决掉了，所以这个点成为它的独享特征了），再下一个是R（6，10）|1，到这里已经够三个不在一条直线上的点了，数字9也就可识别了。然后数字9的共享特征点又可以为剩下的点做判断依据，于是就有了上面的这个识别算法公式。这个公式要确保的条件是：&lt;/p&gt;&#xD;
&lt;p&gt;每一行至少有三个不在同一直线上的特征点 ；&lt;/p&gt;&#xD;
&lt;p&gt;本行若存在共享特征，则需共享方数字已经在本行之前被推导（如数字4的共享特征方1、4、7均已在之前被推导）；&lt;/p&gt;&#xD;
&lt;p&gt;说了这么多，我的算法终于介绍完了，不知道大家有何看法或者想讨论的，可以直接留言。&lt;/p&gt;&#xD;
&lt;p&gt;附件：&lt;a href="http://www.zaibc.com/download/NumSpider.zip" target="_blank"&gt;点击这里下载演示程序&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;后来我又写了篇文章将源代码放出，具体请参考文章&lt;a href="http://www.zaibc.com/programming/the-source-code-of-csharp-for-jing-dong-price-interface.html" target="_blank"&gt;《【技术原创】京东商城价格图片分析解析源代码下载（C#），附演示程序&lt;/a&gt;》&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/yimi329/aggbug/2249658.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yimi329/archive/2011/11/15/2249658.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yimi329/archive/2009/11/17/1604822.html</id><title type="text">Silverlight3实现按路径运动[原创]</title><summary type="text">这几天需要给终端机做个一组Logo沿圆形轨迹转动效果, 直接用Winform实现太卡(通过不断绘图方式), 考虑到SL3可以脱机运行, 就用它来实现. 网上也找了很多教程, 发现没有较好的方法, 最后自己"研究"出一种可行的方法, 供大家讨论: 1.运行效果:[代码] 相信大家都能看得懂代码的意思, 这里由于时间原因(马上要下班走人了)我就不多啰嗦了, 大家有什么好的方案也欢迎一同讨论. 程序运行...</summary><published>2009-11-17T10:14:00Z</published><updated>2009-11-17T10:14:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2009/11/17/1604822.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2009/11/17/1604822.html"/></entry><entry><id>http://www.cnblogs.com/yimi329/archive/2007/12/20/1007975.html</id><title type="text">MSSQL2000 复制数据的难题,只能通过远程上的网站访问数据库.</title><summary type="text"/><published>2007-12-20T14:05:00Z</published><updated>2007-12-20T14:05:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2007/12/20/1007975.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2007/12/20/1007975.html"/></entry><entry><id>http://www.cnblogs.com/yimi329/archive/2007/12/07/986424.html</id><title type="text">初学Flex,在使用Webservice时遇到Xml数据绑定的一个问题，试了N个方案，均没解决。</title><summary type="text"/><published>2007-12-07T02:51:00Z</published><updated>2007-12-07T02:51:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2007/12/07/986424.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2007/12/07/986424.html"/></entry><entry><id>http://www.cnblogs.com/yimi329/archive/2007/10/06/915221.html</id><title type="text">关于网站应用中XML的使用心得[原创]</title><summary type="text"/><published>2007-10-06T03:32:00Z</published><updated>2007-10-06T03:32:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2007/10/06/915221.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2007/10/06/915221.html"/></entry><entry><id>http://www.cnblogs.com/yimi329/archive/2007/06/30/801628.html</id><title type="text">[转载]动态决定加载dll多个版本的完美方案</title><summary type="text"/><published>2007-06-30T14:19:00Z</published><updated>2007-06-30T14:19:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2007/06/30/801628.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2007/06/30/801628.html"/></entry><entry><id>http://www.cnblogs.com/yimi329/archive/2007/06/28/799463.html</id><title type="text">关于网站设计中XML的使用，请教各位高手了！</title><summary type="text"/><published>2007-06-28T15:10:00Z</published><updated>2007-06-28T15:10:00Z</updated><author><name>Brush</name><uri>http://www.cnblogs.com/yimi329/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yimi329/archive/2007/06/28/799463.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yimi329/archive/2007/06/28/799463.html"/></entry></feed>
