﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-misschuer</title><link>http://www.cppblog.com/misschuer/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:41:13 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:41:13 GMT</pubDate><ttl>60</ttl><item><title>OpenResty实现限流的几种方式</title><link>http://www.cppblog.com/misschuer/archive/2018/04/16/215588.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Mon, 16 Apr 2018 08:16:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2018/04/16/215588.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/215588.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2018/04/16/215588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/215588.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/215588.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文转自:http://www.itzh.org/2018/01/14/openresty_rate_limiter_methods/在开发&nbsp;api&nbsp;网关的时，做过一些简单的限流，比如说静态拦截和动态拦截；静态拦截说白了就是限流某一个接口在一定时间窗口的请求数。用户可以在系统上给他们的接口配置一个每秒最大调用量，如果超过这个限制，则拒绝服务此接口，而动态拦截其实也是基于静态拦截...&nbsp;&nbsp;<a href='http://www.cppblog.com/misschuer/archive/2018/04/16/215588.html'>阅读全文</a><img src ="http://www.cppblog.com/misschuer/aggbug/215588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2018-04-16 16:16 <a href="http://www.cppblog.com/misschuer/archive/2018/04/16/215588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>斐波那契螺旋线</title><link>http://www.cppblog.com/misschuer/archive/2017/12/11/215419.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Mon, 11 Dec 2017 11:33:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2017/12/11/215419.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/215419.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2017/12/11/215419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/215419.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/215419.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">this</span>.stars.push(<span style="color: #0000FF; ">new</span>&nbsp;Star(0,&nbsp;0));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;origin:Vector2D&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Vector2D(0,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;stl&nbsp;=&nbsp;[];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;v&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Vector2D(0,&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;sp&nbsp;=&nbsp;4;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;rad&nbsp;=&nbsp;2.0&nbsp;*&nbsp;Math.PI&nbsp;/&nbsp;sp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">var</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;sp;&nbsp;++&nbsp;i)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;g&nbsp;=&nbsp;rad&nbsp;*&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;ttt&nbsp;=&nbsp;v.clone();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ttt.rotate(g);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stl.push(ttt);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;var&nbsp;stl&nbsp;=&nbsp;[new&nbsp;Vector2D(0,1),&nbsp;new&nbsp;Vector2D(-1,0),&nbsp;new&nbsp;Vector2D(0,-1),&nbsp;new&nbsp;Vector2D(1,0)];</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;vx&nbsp;=&nbsp;[-1,&nbsp;1,&nbsp;1,&nbsp;-1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;vy&nbsp;=&nbsp;[-1,&nbsp;-1,&nbsp;1,&nbsp;1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;fib&nbsp;=&nbsp;[1,&nbsp;2,&nbsp;3,&nbsp;5,&nbsp;8,&nbsp;13,&nbsp;21];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;fib&nbsp;=&nbsp;[1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5,&nbsp;6,&nbsp;7,&nbsp;8];</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;temp:Vector2D&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Vector2D();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;prev:Vector2D&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Vector2D();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">var</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;stl.length;&nbsp;++&nbsp;i)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;console.log("------------------");</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;s&nbsp;=&nbsp;stl[&nbsp;i&nbsp;];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;console.log(s.toString());</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">var</span>&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;fib.length;&nbsp;++&nbsp;j)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.set45Vector();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;vecx&nbsp;=&nbsp;vx[(i+j)&nbsp;&amp;&nbsp;3];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;vecy&nbsp;=&nbsp;vy[(i+j)&nbsp;&amp;&nbsp;3];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.scaleByXY(vecx&nbsp;*&nbsp;fib[&nbsp;j&nbsp;],&nbsp;vecy&nbsp;*&nbsp;fib[&nbsp;j&nbsp;]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.stars.push(<span style="color: #0000FF; ">new</span>&nbsp;Star(s.X,&nbsp;s.Y));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.copyTo(prev);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.transform(temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;circleCoordinate:Vector2D&nbsp;=&nbsp;prev.cal45CircleCoordinate(s,&nbsp;(vecy/vecx)&nbsp;&gt;&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;console.log("circle&nbsp;coordinate",&nbsp;circleCoordinate.toString());</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;size&nbsp;=&nbsp;7;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;rad:number&nbsp;=&nbsp;Math.PI&nbsp;/&nbsp;2&nbsp;/&nbsp;size;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(j&nbsp;&gt;&nbsp;-1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">var</span>&nbsp;k&nbsp;=&nbsp;1;&nbsp;k&nbsp;&lt;=&nbsp;size;&nbsp;++&nbsp;k)&nbsp;{<br />&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 style="color: #0000FF; ">var</span>&nbsp;tt:Vector2D&nbsp;=&nbsp;prev.clone();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt.transform(circleCoordinate,&nbsp;<span style="color: #0000FF; ">false</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt.rotate(rad&nbsp;*&nbsp;k);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt.transform(circleCoordinate,&nbsp;<span style="color: #0000FF; ">true</span>);<br />&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 style="color: #0000FF; ">this</span>.stars.push(<span style="color: #0000FF; ">new</span>&nbsp;Star(tt.X,&nbsp;tt.Y));<br />&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 style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;console.log("tt&nbsp;=&nbsp;",&nbsp;tt.toString());</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;console.log(s.toString());</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div><img src ="http://www.cppblog.com/misschuer/aggbug/215419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2017-12-11 19:33 <a href="http://www.cppblog.com/misschuer/archive/2017/12/11/215419.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>法线的逆转置矩阵推倒(转)</title><link>http://www.cppblog.com/misschuer/archive/2017/12/06/215394.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Wed, 06 Dec 2017 03:39:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2017/12/06/215394.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/215394.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2017/12/06/215394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/215394.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/215394.html</trackback:ping><description><![CDATA[<h2>Transforming Planes</h2><p style="box-sizing: border-box; margin: 0px 0px 14px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: Arial; background-color: #ffffff;">If we have a plane vector&nbsp;<strong style="box-sizing: border-box;">n</strong>&nbsp;= [a, b, c, d] which describes a plane then for any point&nbsp;<strong style="box-sizing: border-box;">p</strong>&nbsp;= [x, y, z, 1] in that plane the follow equation holds:</p><p style="box-sizing: border-box; margin: 0px 0px 14px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: Arial; background-color: #ffffff;"><strong style="box-sizing: border-box;">n</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">t</span>&nbsp;<strong style="box-sizing: border-box;">p</strong>&nbsp;= ax + by + cz + d = 0</p><p style="box-sizing: border-box; margin: 0px 0px 14px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: Arial; background-color: #ffffff;">If for a point&nbsp;<strong style="box-sizing: border-box;">p</strong>&nbsp;on the plane, we apply an invertible transformation&nbsp;<strong style="box-sizing: border-box;">R</strong>&nbsp;to get the transformed point&nbsp;<strong style="box-sizing: border-box;">p<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; bottom: -0.25em;">1</span></strong>, then the plane vector&nbsp;<strong style="box-sizing: border-box;">n<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; bottom: -0.25em;">1</span></strong>&nbsp;of the transformed plane is given by applying a corresponding transformation&nbsp;<strong style="box-sizing: border-box;">Q</strong>&nbsp;to the original plane vector&nbsp;<strong style="box-sizing: border-box;">n</strong>&nbsp;where&nbsp;<strong style="box-sizing: border-box;">Q</strong>&nbsp;is unknown.</p><p style="box-sizing: border-box; margin: 0px 0px 14px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: Arial; background-color: #ffffff;"><strong style="box-sizing: border-box;">p<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; bottom: -0.25em;">1</span></strong>&nbsp;=&nbsp;<strong style="box-sizing: border-box;">R&nbsp;p&nbsp;<br style="box-sizing: border-box;" />n<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; bottom: -0.25em;">1</span></strong>&nbsp;=&nbsp;<strong style="box-sizing: border-box;">Q&nbsp;n</strong>&nbsp;<br style="box-sizing: border-box;" /></p><span style="color: #454545; font-family: Arial; background-color: #ffffff;">We can solve for&nbsp;</span><strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">Q</strong><span style="color: #454545; font-family: Arial; background-color: #ffffff;">&nbsp;by using the resulting plane equation:&nbsp;</span><br style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;" /><p style="box-sizing: border-box; margin: 0px 0px 14px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: Arial; background-color: #ffffff;"><strong style="box-sizing: border-box;">n<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; bottom: -0.25em;">1</span></strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">t</span>&nbsp;<strong style="box-sizing: border-box;">p<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; bottom: -0.25em;">1</span></strong>&nbsp;= 0&nbsp;<br style="box-sizing: border-box;" /></p><span style="color: #454545; font-family: Arial; background-color: #ffffff;">Begin by substituting for&nbsp;</span><strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">n<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; bottom: -0.25em;">1</span></strong><span style="color: #454545; font-family: Arial; background-color: #ffffff;">&nbsp;and&nbsp;</span><strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">p<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; bottom: -0.25em;">1</span></strong><span style="color: #454545; font-family: Arial; background-color: #ffffff;">:&nbsp;</span><br style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;" /><p style="box-sizing: border-box; margin: 0px 0px 14px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: Arial; background-color: #ffffff;">(<strong style="box-sizing: border-box;">Q&nbsp;n</strong>)<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">t</span>&nbsp;(<strong style="box-sizing: border-box;">R&nbsp;p</strong>) = 0&nbsp;<br style="box-sizing: border-box;" /><strong style="box-sizing: border-box;">n</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">t</span>&nbsp;<strong style="box-sizing: border-box;">Q</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">t</span>&nbsp;<strong style="box-sizing: border-box;">R&nbsp;p</strong>&nbsp;= 0&nbsp;<br style="box-sizing: border-box;" /></p><span style="color: #454545; font-family: Arial; background-color: #ffffff;">If&nbsp;</span><strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">Q</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em; color: #454545; font-family: Arial; background-color: #ffffff;">t</span>&nbsp;<strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">R</strong><span style="color: #454545; font-family: Arial; background-color: #ffffff;">&nbsp;=&nbsp;</span><strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">I</strong><span style="color: #454545; font-family: Arial; background-color: #ffffff;">&nbsp;then&nbsp;</span><strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">n</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em; color: #454545; font-family: Arial; background-color: #ffffff;">t</span>&nbsp;<strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">Q</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em; color: #454545; font-family: Arial; background-color: #ffffff;">t</span>&nbsp;<strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">R&nbsp;p</strong><span style="color: #454545; font-family: Arial; background-color: #ffffff;">&nbsp;=&nbsp;</span><strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">n</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em; color: #454545; font-family: Arial; background-color: #ffffff;">t</span>&nbsp;<strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">I&nbsp;p</strong><span style="color: #454545; font-family: Arial; background-color: #ffffff;">&nbsp;=&nbsp;</span><strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">n</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em; color: #454545; font-family: Arial; background-color: #ffffff;">t</span>&nbsp;<strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">p</strong><span style="color: #454545; font-family: Arial; background-color: #ffffff;">&nbsp;= 0 which is given.</span><br style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;" /><p style="box-sizing: border-box; margin: 0px 0px 14px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: Arial; background-color: #ffffff;"><strong style="box-sizing: border-box;">Q</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">t</span>&nbsp;<strong style="box-sizing: border-box;">R</strong>&nbsp;=&nbsp;<strong style="box-sizing: border-box;">I&nbsp;<br style="box-sizing: border-box;" />Q</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">t</span>&nbsp;=&nbsp;<strong style="box-sizing: border-box;">R</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">-1</span>&nbsp;<br style="box-sizing: border-box;" /><strong style="box-sizing: border-box;">Q</strong>&nbsp;= (<strong style="box-sizing: border-box;">R</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">-1</span>)<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">t</span>&nbsp;<br style="box-sizing: border-box;" /></p><span style="color: #454545; font-family: Arial; background-color: #ffffff;">Substituting&nbsp;</span><strong style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;">Q</strong><span style="color: #454545; font-family: Arial; background-color: #ffffff;">&nbsp;back into our plane vector transformation equation we get:&nbsp;</span><br style="box-sizing: border-box; color: #454545; font-family: Arial; background-color: #ffffff;" /><p style="box-sizing: border-box; margin: 0px 0px 14px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: Arial; background-color: #ffffff;"><strong style="box-sizing: border-box;">n<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; bottom: -0.25em;">1</span></strong>&nbsp;=&nbsp;<strong style="box-sizing: border-box;">Q&nbsp;n</strong>&nbsp;= (<strong style="box-sizing: border-box;">R</strong><span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">-1</span>)<span style="box-sizing: border-box; position: relative; font-size: 12px; line-height: 0; vertical-align: baseline; top: -0.5em;">t</span>&nbsp;<strong style="box-sizing: border-box;">n</strong></p><img src ="http://www.cppblog.com/misschuer/aggbug/215394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2017-12-06 11:39 <a href="http://www.cppblog.com/misschuer/archive/2017/12/06/215394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三维旋转(转载)</title><link>http://www.cppblog.com/misschuer/archive/2017/12/04/215389.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Mon, 04 Dec 2017 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2017/12/04/215389.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/215389.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2017/12/04/215389.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/215389.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/215389.html</trackback:ping><description><![CDATA[<div>http://blog.csdn.net/csxiaoshui/article/details/65446125</div><img src ="http://www.cppblog.com/misschuer/aggbug/215389.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2017-12-04 15:50 <a href="http://www.cppblog.com/misschuer/archive/2017/12/04/215389.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>齐次坐标的理解(转载别人的)</title><link>http://www.cppblog.com/misschuer/archive/2017/12/04/215387.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Mon, 04 Dec 2017 06:34:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2017/12/04/215387.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/215387.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2017/12/04/215387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/215387.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/215387.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; background-color: #f6e497;">来源&nbsp;<span style="font-family: verdana, &quot;courier new&quot;; font-size: 14px; line-height: 21px;">https://www.cnblogs.com/csyisong/archive/2008/12/09/1351372.html</span></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; background-color: #f6e497;"><br />&nbsp;一直对齐次坐标这个概念的理解不够彻底，只见大部分的书中说道&#8220;齐次坐标在仿射变换中非常的方便&#8221;，然后就没有了后文，今天在一个叫做&#8220;三百年 重生&#8221;的博客上看到一篇关于透视投影变换的探讨的文章，其中有对齐次坐标有非常精辟的说明，特别是针对这样一句话进行了有力的证明：<em style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;">&#8220;齐次坐标表示是计算机图形学的重要手段之一，它既能够用来明确区分向量和点，同时也更易用于进行仿射（线性）几何变换。&#8221;&#8212;&#8212;</span>&nbsp;</em>F.S. Hill, JR。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; background-color: #f6e497;">&nbsp;&nbsp;&nbsp;&nbsp; 由于作者对齐次坐标真的解释的不错，我就原封不动的摘抄过来：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; background-color: #f6e497;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="margin: 0px; padding: 0px; font-family: &quot;Times New Roman&quot;;">&nbsp;对于一个</span><em style="margin: 0px; padding: 0px; font-family: &quot;Times New Roman&quot;;">向量</em><strong style="margin: 0px; padding: 0px; font-family: &quot;Times New Roman&quot;;"><span style="margin: 0px; padding: 0px;">v</span></strong><span style="margin: 0px; padding: 0px; font-family: &quot;Times New Roman&quot;;">以及基</span><strong style="margin: 0px; padding: 0px; font-family: &quot;Times New Roman&quot;;"><span style="margin: 0px; padding: 0px;">oabc</span></strong>，<span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: &quot;Times New Roman&quot;;">可以找到一组坐标</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(v1,v2,v3)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: &quot;Times New Roman&quot;;">，使得</span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">v</span></strong><span style="margin: 0px; padding: 0px; font-size: 12pt;">&nbsp;= v1&nbsp;</span><span style="margin: 0px; padding: 0px; font-size: 12pt;"><strong style="margin: 0px; padding: 0px;">a</strong>&nbsp;+ v2&nbsp;<strong style="margin: 0px; padding: 0px; font-size: 10pt;">b +&nbsp;</strong></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">v3</span><span style="margin: 0px; padding: 0px; font-size: 12pt;"><strong style="margin: 0px; padding: 0px;">&nbsp;c</strong></span><span style="margin: 0px; padding: 0px;"><strong style="margin: 0px; padding: 0px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</strong></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;">（</span><span style="margin: 0px; padding: 0px;">1</span></strong><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;">）</span></strong></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; background-color: #f6e497;"><strong style="margin: 0px; padding: 0px;">&nbsp;</strong><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">而对于一个</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;"><em style="margin: 0px; padding: 0px;">点</em></span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">p</span></span></strong><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">，则可以找到一组坐标（</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">p1,p2,p3</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">），使得</span>&nbsp;<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">p</span></strong><span style="margin: 0px; padding: 0px; font-size: 12pt;">&nbsp;&#8211;&nbsp;</span><span style="margin: 0px; padding: 0px; font-size: 12pt;"><strong style="margin: 0px; padding: 0px;">o</strong>&nbsp;= p1&nbsp;<strong style="margin: 0px; padding: 0px; font-size: 12pt;">a +&nbsp;</strong>p2&nbsp;<strong style="margin: 0px; padding: 0px;">b</strong>&nbsp;+ p3&nbsp;<strong style="margin: 0px; padding: 0px;">c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="margin: 0px; padding: 0px; font-family: 宋体;"><strong style="margin: 0px; padding: 0px;">（</strong></span><strong style="margin: 0px; padding: 0px;">2），</strong></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; background-color: #f6e497;"><strong style="margin: 0px; padding: 0px;"></strong>&nbsp;</p><p style=" padding: 0px; font-size: 13px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">从上面对</span><em style="margin: 0px; padding: 0px; font-size: 12pt;">向量</em><span style="margin: 0px; padding: 0px; font-size: 12pt;">和</span><em style="margin: 0px; padding: 0px; font-size: 12pt;">点</em><span style="margin: 0px; padding: 0px; font-size: 12pt;">的表达，我们可以看出为了在坐标系中表示一个</span><em style="margin: 0px; padding: 0px; font-size: 12pt;">点</em><span style="margin: 0px; padding: 0px; font-size: 12pt;">（如</span>p<span style="margin: 0px; padding: 0px; font-size: 12pt;">），我们把点的位置看作是对这个基的原点</span>o<span style="margin: 0px; padding: 0px; font-size: 12pt;">所进行的一个位移，即一个向量&#8212;&#8212;</span>p &#8211; o<span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">（有的书中把这样的向量叫做<em style="margin: 0px; padding: 0px;">位置向量</em>&#8212;&#8212;起始于坐标原点的特殊向量），我们在表达这个向量的同时用等价的方式表达出了点</span>p：<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;">p&nbsp;</span></strong><span style="margin: 0px; padding: 0px;">=&nbsp;<strong style="margin: 0px; padding: 0px;">o</strong>&nbsp;+ p1&nbsp;<strong style="margin: 0px; padding: 0px;">a +&nbsp;</strong>p2&nbsp;<strong style="margin: 0px; padding: 0px;">b</strong>&nbsp;+ p3&nbsp;<strong style="margin: 0px; padding: 0px;">c (3)</strong></span></p><p style=" padding: 0px; font-size: 13px;">&nbsp;</p><p style=" padding: 0px; font-size: 13px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(1)(3)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">是坐标系下表达一个</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;"><em style="margin: 0px; padding: 0px;">向量</em>和<em style="margin: 0px; padding: 0px;">点</em>的不同表达方式。这里可以看出，虽然都是用代数分量的形式表达向量和点，但表达一个点比一个向量需要额外的信息。如果我写出一个代数分量表达</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(1, 4, 7)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">，谁知道它是个向量还是个点！</span></p><p style=" padding: 0px; font-size: 13px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;"><span style="margin: 0px; padding: 0px;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="margin: 0px; padding: 0px; font-size: 12pt;">我们现在把（</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">1</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">）（</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">3</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">）写成矩阵的形式：<span style="margin: 0px; padding: 0px; font-size: 12pt; color: red;">v = (v1 v2 v3 0)&nbsp;X&nbsp;(a b c o)</span></span></span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; color: red;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">p = (p1 p2 p3 1) X (a b c o),</span></span></span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">这里</span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(a,b,c,o)</span></span></strong><span style="margin: 0px; padding: 0px; font-size: 12pt;">是坐标基矩阵，右边的列向量分别是向量</span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">v</span></span></strong><span style="margin: 0px; padding: 0px; font-size: 12pt;">和点</span><strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">p</span></span></strong><span style="margin: 0px; padding: 0px; font-size: 12pt;">在基下的坐标。</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">这样，向量和点在同一个基下就有了不同的表达：<em style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">3D</span></span></em><em style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">向量</span></em><span style="margin: 0px; padding: 0px; font-size: 12pt;">的第</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">4</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">个代数分量是</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">0</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">，而</span><em style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">3D</span></span></em><em style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">点</span></em><span style="margin: 0px; padding: 0px; font-size: 12pt;">的第</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">4</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">个代数分量是</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">1</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">。像这种这种用</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">4</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">个代数分量表示</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">3D</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">几何概念的方式是一种齐次坐标表示。</span></span></span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;">&nbsp;</p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">这样，上面的</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(1, 4, 7)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">如果写成（</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">1,4,7,0</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">），它就是个向量；如果是</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(1,4,7,1)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">，它就是个点。</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">下面是如何在普通坐标</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(Ordinary Coordinate)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">和齐次坐标</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(Homogeneous Coordinate)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">之间进行转换：</span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(1)</span><span style="margin: 0px; padding: 0px; font-size: 12pt; color: red;">从普通坐标转换成齐次坐标时</span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;">&nbsp;&nbsp;&nbsp;</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">如果</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(x,y,z)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">是个点，则变为</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(x,y,z,1);</span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;">&nbsp;&nbsp;&nbsp;</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">如果</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(x,y,z)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">是个向量，则变为</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(x,y,z,0)</span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(2)<span style="margin: 0px; padding: 0px; font-family: 宋体;"><span style="margin: 0px; padding: 0px; color: red;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">从齐次坐标转换成普通坐标时</span></span></span></span></span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;">&nbsp;&nbsp;&nbsp;</span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;">&nbsp;&nbsp;&nbsp;<span style="margin: 0px; padding: 0px; font-size: 12pt;">如果是</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(x,y,z,1)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">，则知道它是个点，变成</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(x,y,z);</span></span></span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;">&nbsp;&nbsp;&nbsp;</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">如果是</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(x,y,z,0)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">，则知道它是个向量，仍然变成</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(x,y,z)</span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;">&nbsp;</p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">以上是通过齐次坐标来区分向量和点的方式。从中可以思考得知，对于平移</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">T</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">、旋转</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">R</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">、缩放</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">S</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">这</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">3</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">个最常见的仿射变换，平移变换只对于点才有意义，因为普通向量没有位置概念，只有大小和方向.</span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;">&nbsp;</p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">而旋转和缩放对于向量和点都有意义，你可以用类似上面齐次表示来检测。从中可以看出，齐次坐标用于仿射变换非常方便。</span></span></span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; background-color: #f6e497;">&nbsp;</p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; background-color: #f6e497;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-family: 宋体;"><span style="margin: 0px; padding: 0px; color: red;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">此外，对于一个普通坐标的</span><span style="margin: 0px; padding: 0px; font-size: 12pt;"><em style="margin: 0px; padding: 0px;">点</em></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">P=(Px, Py, Pz)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">，有对应的一族齐次坐标</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(wPx, wPy, wPz, w)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">，其中</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">w</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt;">不等于零</span></span></span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">。比如，</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">P(1, 4, 7)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">的齐次坐</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">标有</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">(1, 4, 7, 1)</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">、（</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">2, 8, 14, 2</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">）、（</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">-0.1, -0.4, -0.7, -0.1</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">）等等</span><span style="margin: 0px; padding: 0px; font-family: 宋体;">。</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">因此，如果把一个点从普通坐标变成齐次坐标，给</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">x,y,z</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">乘上同一个非零数</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">w</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">，然后增加第</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">4</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">个分量</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">w</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">；如果把一个齐</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">次坐标转换成普通坐标，把</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">前三个坐标同时除以第</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">4</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">个坐标，然后去掉第</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">4</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">个分量。</span></span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; background-color: #f6e497;">&nbsp;</p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; background-color: #f6e497;"><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">由于齐次坐标使用了</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">4</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">个分量来表达</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">3D</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">概念，使得平移变换可以使用矩阵进行，从而如</span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 12pt;">F.S. Hill, JR</span></span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">所说，仿射（线性）变换的进行</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">更加方便。由于图形硬件已经普遍地支持齐次坐标与矩阵乘法，因此更加促进了齐次坐标使用，使得它似乎成为图形学中的一个标准。</span></p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; background-color: #f6e497;">&nbsp;</p><p style=" padding: 0px; font-size: 13px; line-height: 19.5px; font-family: 微软雅黑, verdana, &quot;ms song&quot;, 宋体, Arial, Helvetica, sans-serif; background-color: #f6e497;"><span style="margin: 0px; padding: 0px; font-family: 宋体;">&nbsp;&nbsp;&nbsp;</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">以上很好的阐释了齐次坐标的作用及运用齐次坐标的好处。其实在图形学的理论中，很多已经被封装的好的API也是很有研究</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">的，要想成为一名专业的计算机</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">图形学</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">的</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">学习者，除了知其然必须还得知其所以然。</span><span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: 宋体;">这样在遇到问题的时候才能迅速定位问题的根源，从而解决问题。</span></p><img src ="http://www.cppblog.com/misschuer/aggbug/215387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2017-12-04 14:34 <a href="http://www.cppblog.com/misschuer/archive/2017/12/04/215387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对象池(套用了网上的一个有BUG代码 自己补充的 没实际用过)</title><link>http://www.cppblog.com/misschuer/archive/2015/05/18/210686.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Mon, 18 May 2015 10:49:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2015/05/18/210686.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/210686.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2015/05/18/210686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/210686.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/210686.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span>&nbsp;java.util.Enumeration;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.Vector;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ObjectPool&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;PRINTABLE&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Class&lt;?&gt;&nbsp;clazz&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;numObjects&nbsp;=&nbsp;10;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maxObjects&nbsp;=&nbsp;50;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Vector&lt;PooledObject&gt;&nbsp;objects&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectPool&nbsp;pool&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ObjectPool(XX.<span style="color: #0000FF; ">class</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool.createPool();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XX&nbsp;xx&nbsp;=&nbsp;(XX)&nbsp;pool.getObject();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xx.reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xx.setAge(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xx.setSex("M");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool.returnObject(xx);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool.closeObjectPool();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;ObjectPool(Class&lt;?&gt;&nbsp;clazz)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.clazz&nbsp;=&nbsp;clazz;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">synchronized</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;createPool()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(<span style="color: #0000FF; ">this</span>.objects&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.objects&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Vector&lt;PooledObject&gt;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;<span style="color: #0000FF; ">this</span>.numObjects;&nbsp;++&nbsp;i)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;createObjects();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">synchronized</span>&nbsp;Object&nbsp;getObject()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(<span style="color: #0000FF; ">this</span>.objects&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;conn&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.getFreeObject();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(conn&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(250);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.getFreeObject();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;conn;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Object&nbsp;getFreeObject()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;obj&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.findFreeObject();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(obj&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.createObjects();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.findFreeObject();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(obj&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;obj;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;createObjects()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(<span style="color: #0000FF; ">this</span>.objects.size()&nbsp;&lt;&nbsp;<span style="color: #0000FF; ">this</span>.maxObjects)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message("created"&nbsp;+&nbsp;<span style="color: #0000FF; ">this</span>.objects.size());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;obj&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.clazz.newInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.objects.addElement(<span style="color: #0000FF; ">new</span>&nbsp;PooledObject(<span style="color: #0000FF; ">this</span>.objects.size(),&nbsp;obj));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Object&nbsp;findFreeObject()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message("before&nbsp;free:--------");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.print();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;obj&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PooledObject&nbsp;pooledObject&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&lt;PooledObject&gt;&nbsp;enumerate&nbsp;=&nbsp;objects.elements();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(enumerate.hasMoreElements())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pooledObject&nbsp;=&nbsp;(PooledObject)&nbsp;enumerate.nextElement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!pooledObject.isBusy())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pooledObject.setBusy(<span style="color: #0000FF; ">true</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;=&nbsp;pooledObject.getObject();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message("free&nbsp;object");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message("after&nbsp;free:--------");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.print();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;obj;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;returnObject(Object&nbsp;obj)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(<span style="color: #0000FF; ">this</span>.objects&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message("before&nbsp;return:--------");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.print();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PooledObject&nbsp;pooledObject&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&lt;PooledObject&gt;&nbsp;enumerate&nbsp;=&nbsp;objects.elements();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(enumerate.hasMoreElements())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pooledObject&nbsp;=&nbsp;(PooledObject)&nbsp;enumerate.nextElement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(obj&nbsp;==&nbsp;pooledObject.getObject())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pooledObject.setBusy(<span style="color: #0000FF; ">false</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message("return&nbsp;object");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message("after&nbsp;return:--------");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.print();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">synchronized</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;closeObjectPool()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(<span style="color: #0000FF; ">this</span>.objects&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PooledObject&nbsp;pooledObject&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&lt;PooledObject&gt;&nbsp;enumerate&nbsp;=&nbsp;objects.elements();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(enumerate.hasMoreElements())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pooledObject&nbsp;=&nbsp;(PooledObject)&nbsp;enumerate.nextElement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message(pooledObject.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pooledObject.isBusy())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message("wait&nbsp;5000");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(5000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.objects.clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.objects&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;wait(<span style="color: #0000FF; ">int</span>&nbsp;millionSeconds)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(millionSeconds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;print()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&lt;PooledObject&gt;&nbsp;enumerate&nbsp;=&nbsp;objects.elements();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(enumerate.hasMoreElements())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PooledObject&nbsp;pooledObject&nbsp;=&nbsp;(PooledObject)&nbsp;enumerate.nextElement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message(pooledObject.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.message("print&nbsp;end==============================");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;message(String&nbsp;msg)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(PRINTABLE)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(msg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;PooledObject&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;index&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;objection&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;busy&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;此对象是否正在使用的标志，默认没有正在使用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;构造函数，根据一个&nbsp;Object&nbsp;构告一个&nbsp;PooledObject&nbsp;对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;PooledObject(<span style="color: #0000FF; ">int</span>&nbsp;index,&nbsp;Object&nbsp;objection)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.index&nbsp;=&nbsp;index;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.objection&nbsp;=&nbsp;objection;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.busy&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;返回此对象中的对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Object&nbsp;getObject()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;objection;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设置此对象的，对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setObject(Object&nbsp;objection)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.objection&nbsp;=&nbsp;objection;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;获得对象对象是否忙&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;isBusy()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;busy;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设置对象的对象正在忙&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setBusy(<span style="color: #0000FF; ">boolean</span>&nbsp;busy)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.busy&nbsp;=&nbsp;busy;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getIndex()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;index;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setIndex(<span style="color: #0000FF; ">int</span>&nbsp;index)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.index&nbsp;=&nbsp;index;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;toString()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;String.format("[PooledObject]&nbsp;index:%d,&nbsp;busy:%b",&nbsp;<span style="color: #0000FF; ">this</span>.index,&nbsp;<span style="color: #0000FF; ">this</span>.busy);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />}<br /><br /><br /><span style="color: #0000FF; ">class</span>&nbsp;XX&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;age&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;sex&nbsp;=&nbsp;"";<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;XX()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;reset()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.age&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.sex&nbsp;=&nbsp;"";<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getAge()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;age;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setAge(<span style="color: #0000FF; ">int</span>&nbsp;age)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.age&nbsp;=&nbsp;age;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;getSex()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sex;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setSex(String&nbsp;sex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.sex&nbsp;=&nbsp;sex;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><img src ="http://www.cppblog.com/misschuer/aggbug/210686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2015-05-18 18:49 <a href="http://www.cppblog.com/misschuer/archive/2015/05/18/210686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>centos上运行jni</title><link>http://www.cppblog.com/misschuer/archive/2015/05/07/210572.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Thu, 07 May 2015 09:14:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2015/05/07/210572.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/210572.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2015/05/07/210572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/210572.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/210572.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #0000FF; ">import</span>&nbsp;java.io.File;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.FileOutputStream;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.InputStream;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.StringTokenizer;<br /><br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Test&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">native</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;hello();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;LIBFILENAME&nbsp;=&nbsp;"/home/my/java/libtest.so";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">System.loadLibrary(LIBFILENAME);</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;获取到java.library.path&nbsp;&nbsp;及系统变量中Path中的内容</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;libpath&nbsp;=&nbsp;System.getProperty("java.library.path");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(libpath&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;||&nbsp;libpath.length()&nbsp;==&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;RuntimeException("java.library.path&nbsp;is&nbsp;null");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">javaBinPath&nbsp;&nbsp;&nbsp;jdk的bin目录D:\Program&nbsp;Files\Java\jdk1.6.0_11\bin</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;javaBinPath&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringTokenizer&nbsp;st&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StringTokenizer(libpath,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.getProperty("path.separator"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(st.hasMoreElements())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;javaBinPath&nbsp;=&nbsp;st.nextToken();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;RuntimeException("can&nbsp;not&nbsp;split&nbsp;library&nbsp;path:"<br />&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;libpath);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;把dll文件写入到java.library.path中该dll放在ConvertWord2HM相同目录下，这个可以是你的类名</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inputStream&nbsp;=&nbsp;Test.<span style="color: #0000FF; ">class</span>.getResourceAsStream(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LIBFILENAME);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;File&nbsp;dllFile&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;File(LIBFILENAME);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!dllFile.exists())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;outputStream&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;FileOutputStream(dllFile);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;array&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">byte</span>[1024];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;bytesRead&nbsp;=&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;((bytesRead&nbsp;=&nbsp;inputStream.read(array))&nbsp;!=&nbsp;-1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputStream.write(array,&nbsp;0,&nbsp;bytesRead);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputStream.flush();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputStream.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;动态加载dll</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.load(dllFile.getPath());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;在虚拟机关闭的时候删除dll 这里看着用吧</span><span style="color: #008000; "><br /></span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // dllFile.deleteOnExit();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Throwable&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;RuntimeException("load&nbsp;Convert.dll&nbsp;error!",&nbsp;e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test.hello();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />这个文件是在目录/home/my/java下的<br />javac Test.java<br />javah Test &nbsp;//生成Test.h<br />然后自己写Test.cpp<br />.java .h .cpp 这些文件名字一定要一样<br /><div>g++ -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -fPIC -shared -o libtest.so Test.cpp &nbsp;// 转成你想要的文件 我这里是libtest.so 也可以是libtest.dll, 看你代码调用什么。<br />java Test 就可以运行了<br />用System.loadLibrary() 一直加载不了 只能网上找了个加载lib的代码</div></div><img src ="http://www.cppblog.com/misschuer/aggbug/210572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2015-05-07 17:14 <a href="http://www.cppblog.com/misschuer/archive/2015/05/07/210572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python3的一些包说明</title><link>http://www.cppblog.com/misschuer/archive/2013/11/20/204350.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Wed, 20 Nov 2013 03:44:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2013/11/20/204350.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/204350.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2013/11/20/204350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/204350.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/204350.html</trackback:ping><description><![CDATA[<pre style="overflow-x: auto; overflow-y: hidden; background-color: #eeeeee; color: #333333; font-family: Monaco, Consolas, 'Lucida Console', monospace; margin: 1rem -5px; padding: 5px; border-left-style: none; border-right-style: none; font-size: 0.8rem; line-height: 1rem; "><br />对于ubuntu 12.04LST 安装PIL (<a href="https://github.com/sloonz/pil-py3k">https://github.com/sloonz/pil-py3k</a>)</pre>需要:&nbsp;<br />说明(<a href="http://pillow.readthedocs.org/en/latest/installation.html#linux-installation">http://pillow.readthedocs.org/en/latest/installation.html#linux-installation</a>)<br />libjpeg8<br />libjpeg8-dev<br />libfreetype6<br />libfreetype6-dev&nbsp;<br />zlib1g-dev&nbsp;<br />libtiff4-dev<br />liblcms1-dev<br />libwebp-dev<br />tcl8.5-dev<br />tk8.5-dev<br /><br />一定要等所有所需模块装好 并且 看下这个(<a href="http://jj.isgeek.net/2011/09/install-pil-with-jpeg-support-on-ubuntu-oneiric-64bits/">http://jj.isgeek.net/2011/09/install-pil-with-jpeg-support-on-ubuntu-oneiric-64bits/</a>)<br />然后再装PIL<br />再贴下网上有好心人写的 生成验证码的例子<br /><br /><div>#Fly web app - Verification Code</div><div># -*- coding: utf-8 -*-</div><div>import random</div><div>from io import BytesIO</div><div>import Image, ImageDraw, ImageFont</div><div># 特别注意 from PIL import Image 和 import Image的区别 由于PIL包都是import xxx 所以我们不能写成from xxx import yyy</div><div>class VCode:</div><div>&nbsp; &nbsp; def __init__(self,size=(100,30),length=4,font='',</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;font_color=(51,102,204),font_size=25,font_bg=(255,255,255),</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;line=(3,5),pointBorder = (50,47),save_type= 'JPEG',quality=100):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; """</div><div>&nbsp; &nbsp; &nbsp; &nbsp; 验证码生成类</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; 参数:</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; size - &nbsp;图片高宽(width,height)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; length - 验证码长度</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font - 字体路径</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font_color - 字体颜色(允许是: #FF0000 或 RGB)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font_size - 字体大小</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font_bg - 背景颜色</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; line - 干扰线 (最少，最大)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pointBorder - 散点(越大越多，越大越少)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; save_type - 保存类型</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; quality - 品质</div><div>&nbsp; &nbsp; &nbsp; &nbsp; """</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._size = size</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._font = font</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._font_color = self._str_hex(font_color)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._font_size = font_size</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._length = length</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._font_bg = self._str_hex(font_bg)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._save_type = save_type</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._quality = quality</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; #初始化</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._im = None</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._draw = None</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._code = ''</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._char = 'abcdefghkmnprstuvwyzABCDEFGHKLMNPRSTUVWYZ23456789'</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._pointBorder = pointBorder</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._line = line</div><div></div><div>&nbsp; &nbsp; def Generate(self):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; """生成验证码，并返回图像内容，和验证码"""</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; #生成code</div><div>&nbsp; &nbsp; &nbsp; &nbsp; random_code = self._randomCode()</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._code = &nbsp;'%s' % ''.join(random_code)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; code_str = '%s' % ' '.join(random_code)</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; #图像对象</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._im = Image.new('RGB',self._size,self._font_bg)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._draw = ImageDraw.ImageDraw(self._im)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; imFont = ImageFont.truetype(self._font,self._font_size)</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; w,h = imFont.getsize(self._code)</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; xy = ((self._size[0]-w)/2,(self._size[1]-h)/2)</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._draw.text(xy,code_str,fill=self._font_color,font=imFont)</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; #画干扰点</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._createPoints()</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; #画干扰线</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._createLines()</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; #file对象</div><div>&nbsp; &nbsp; &nbsp; &nbsp; fp = BytesIO()</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; #保存图像</div><div>&nbsp; &nbsp; &nbsp; &nbsp; self._im.save(fp,self._save_type,quality=self._quality)</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; return fp.getvalue(),self._code</div><div></div><div>&nbsp; &nbsp; def _str_hex(self,color):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; """转换颜色值为RGB"""</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if type(color) is str:</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color = color.replace('#','')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp_color = (int(color[0:2],16),int(color[2:4],16),int(color[4:6],16))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; else:</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp_color = color</div><div>&nbsp; &nbsp; &nbsp; &nbsp; return temp_color</div><div></div><div>&nbsp; &nbsp; def _randomCode(self):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; """生成随机code """</div><div>&nbsp; &nbsp; &nbsp; &nbsp; return random.sample(self._char,self._length)</div><div></div><div>&nbsp; &nbsp; def _createPoints(self):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; """画点"""</div><div>&nbsp; &nbsp; &nbsp; &nbsp; for x in range(self._size[0]):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for y in range(self._size[1]):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag = random.randint(0, self._pointBorder[0])</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if flag &gt; self._pointBorder[1]:</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self._draw.point((x, y), fill = self._randomRGB())</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; del flag</div><div></div><div>&nbsp; &nbsp; def _createLines(self):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; """画干扰线"""</div><div>&nbsp; &nbsp; &nbsp; &nbsp; lineNum = random.randint(self._line[0], self._line[1])</div><div>&nbsp; &nbsp; &nbsp; &nbsp; for i in range(lineNum):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin = (random.randint(0, self._size[0]),</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;random.randint(0, self._size[1])</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end = (random.randint(0, self._size[0]),</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;random.randint(0, self._size[1])</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self._draw.line([begin, end], fill = self._randomRGB())</div><div></div><div>&nbsp; &nbsp; def _randomRGB(self):</div><div>&nbsp; &nbsp; &nbsp; &nbsp; """随机生成RGB"""</div><div>&nbsp; &nbsp; &nbsp; &nbsp; return (random.randint(0,255),random.randint(0,255),random.randint(0,255))</div><div></div><div>if __name__ == "__main__":</div><div><span style="white-space:pre">	</span>verification = VCode(font='font/ARLRDBD.TTF')</div><div><span style="white-space:pre">	</span>im, code = verification.Generate()</div><div><span style="white-space:pre">	</span>with open("test.jpeg", "wb") as f:</div><div><span style="white-space:pre">		</span>f.write(im)</div><div><span style="white-space:pre">	</span>print(code)</div><div></div><br /><br />用tornado &nbsp;render html是 html里的python 代码<br /><br /><br /><p style="margin: 0.5em 0px; font-family: Arial, sans-serif; line-height: 19px; background-color: #ffffff; ">Tornado的模板支持控制语句和表达语句，控制语句是使用&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">{%</tt>&nbsp;和&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">%}</tt>&nbsp;包起来的，例如&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">{% if len(items) &gt; 2 %}</tt>&nbsp;。表达语句是使用&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">{{</tt>&nbsp;和&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">}}</tt>&nbsp;包起来的，例如&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">{{ items[0] }}</tt>&nbsp;。</p><p style="margin: 0.5em 0px; font-family: Arial, sans-serif; line-height: 19px; background-color: #ffffff; ">控制语句和对应的Python语句的格式基本完全相同。我们支持&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">if</tt>&nbsp;、&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">for</tt>&nbsp;、&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">while</tt>&nbsp;和&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">try</tt>&nbsp;，这些语句逻辑结束的位置需要用&nbsp;<tt literal"="" style="font-size: 13px; line-height: normal; font-family: Consolas, monospace, 'Dejavu Sans Mono', 'Courier New'; ">{% end %}</tt>&nbsp;做标记<br /><br /><br />图片内容无需保存到.jpeg中, 具体参考下面<br /><a href="http://en.wikipedia.org/wiki/Data_URI_scheme#HTML">http://en.wikipedia.org/wiki/Data_URI_scheme#HTML</a><br /><br /><br />是用mako来在html嵌套python代码<br /><a href="http://blog.csdn.net/luanruisong/article/details/9414635">http://blog.csdn.net/luanruisong/article/details/9414635</a><br /><br /></p><img src ="http://www.cppblog.com/misschuer/aggbug/204350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2013-11-20 11:44 <a href="http://www.cppblog.com/misschuer/archive/2013/11/20/204350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>alchemy c   图像的缩放  (三次卷积)</title><link>http://www.cppblog.com/misschuer/archive/2012/08/10/186801.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Fri, 10 Aug 2012 02:11:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2012/08/10/186801.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/186801.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2012/08/10/186801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/186801.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/186801.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><font size="2">在alchemy c中进行图片的缩放<br /></font>传进的是byteArray 传出的也是byteArray 千万不要在alchemy c 中对as的对象进行函数调用 那样速度很慢.... 达不到炼金术的效果...&nbsp;<br /><font size="2">好吧 代码 自己看吧 还是比较简单的<br />alchemy c 代码</font><br /><font size="2">#include&nbsp;&lt;iostream&gt;</font><br /><font size="2">#include&nbsp;&lt;stdio.h&gt;</font><br /><font size="2">#include&nbsp;&lt;stdlib.h&gt;</font><br /><font size="2">#include&nbsp;&lt;</font><span style="font-size: 13px; color: #0000ff; ">string</span><font size="2">.h&gt;</font><br /><font size="2">#include&nbsp;&lt;math.h&gt;</font><br /><font size="2">#include&nbsp;"AS3.h"</font><br /><font size="2">typedef&nbsp;unsigned&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">;</font><br /><span style="font-size: 13px; color: #0000ff; ">#define</span><font size="2">&nbsp;MAXV&nbsp;4</font><br /><span style="font-size: 13px; color: #0000ff; ">using</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">namespace</span><font size="2">&nbsp;std;</font><br /><br /><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;SinXDivX(</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;x)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;a&nbsp;=&nbsp;-1;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(x&nbsp;&lt;&nbsp;0)</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;-x;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;x2&nbsp;=&nbsp;x&nbsp;*&nbsp;x;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;x3&nbsp;=&nbsp;x2&nbsp;*&nbsp;x;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(x&nbsp;&lt;=&nbsp;1)</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;(a&nbsp;+&nbsp;2)&nbsp;*&nbsp;x3&nbsp;-&nbsp;(a&nbsp;+&nbsp;3)&nbsp;*&nbsp;x2&nbsp;+&nbsp;1;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">else</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(x&nbsp;&lt;=&nbsp;2)</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;a&nbsp;*&nbsp;x3&nbsp;-&nbsp;5&nbsp;*&nbsp;a&nbsp;*&nbsp;x2&nbsp;+&nbsp;8&nbsp;*&nbsp;a&nbsp;*&nbsp;x&nbsp;-&nbsp;4&nbsp;*&nbsp;a;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;0;</font><br /><font size="2">}</font><br /><br /><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;availablePixel(</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;*src,&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;srcWidth,&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;srcHeight,&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;x,&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;y)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">bool</span><font size="2">&nbsp;flag&nbsp;=&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">true</span><font size="2">;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(x&nbsp;&lt;&nbsp;0)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;0;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">false</span><font size="2">;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">else</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(x&nbsp;&gt;=&nbsp;srcWidth)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;srcWidth&nbsp;-&nbsp;1;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">false</span><font size="2">;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(y&nbsp;&lt;&nbsp;0)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;0;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">false</span><font size="2">;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">else</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(y&nbsp;&gt;=&nbsp;srcHeight)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;srcHeight&nbsp;-&nbsp;1;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">false</span><font size="2">;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;lenth&nbsp;=&nbsp;srcWidth&nbsp;*&nbsp;srcHeight;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">in</span><font size="2">&nbsp;=&nbsp;x&nbsp;+&nbsp;y*srcWidth;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;ret&nbsp;=&nbsp;src[</font><span style="font-size: 13px; color: #0000ff; ">in</span><font size="2">];</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(!flag)</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;ret&nbsp;&amp;&nbsp;0x00ffffff;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;ret;</font><br /><font size="2">}</font><br /><br /><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;border_color(</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;Color)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(Color&nbsp;&lt;=&nbsp;0)</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">(0);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(Color&nbsp;&gt;=&nbsp;255)</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">(255);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">(Color);</font><br /><font size="2">}</font><br /><br /><span style="font-size: 13px; color: #0000ff; ">char</span><font size="2">&nbsp;*strreverse(</font><span style="font-size: 13px; color: #0000ff; ">char</span><font size="2">&nbsp;*a)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">char</span><font size="2">&nbsp;r[10]&nbsp;=&nbsp;{&nbsp;0&nbsp;};</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;i,&nbsp;j;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">for</span><font size="2">&nbsp;(i&nbsp;=&nbsp;0,&nbsp;j&nbsp;=&nbsp;strlen(a)&nbsp;-&nbsp;1;&nbsp;a[i];&nbsp;++i,&nbsp;--j)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[j]&nbsp;=&nbsp;a[i];</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;r;</font><br /><font size="2">}</font><br /><br /><span style="font-size: 13px; color: #0000ff; ">char</span><font size="2">&nbsp;*toString(</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;val)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">char</span><font size="2">&nbsp;a[10]&nbsp;=&nbsp;{&nbsp;0&nbsp;};</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">char</span><font size="2">&nbsp;ch[16]&nbsp;=&nbsp;{&nbsp;'0',&nbsp;'1',&nbsp;'2',&nbsp;'3',&nbsp;'4',&nbsp;'5',&nbsp;'6',&nbsp;'7',&nbsp;'8',&nbsp;'9',&nbsp;'A',&nbsp;'B',</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'C',&nbsp;'D',&nbsp;'E',&nbsp;'F'&nbsp;};</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;i&nbsp;=&nbsp;0,&nbsp;rt;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(val&nbsp;==&nbsp;0)</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[0]&nbsp;=&nbsp;'0';</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">while</span><font size="2">&nbsp;(val)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rt&nbsp;=&nbsp;val&nbsp;%&nbsp;16;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;&gt;&gt;=&nbsp;4;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i++]&nbsp;=&nbsp;ch[rt];</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;strreverse(a);</font><br /><font size="2">}</font><br /><br /><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;MatrixMutiple(</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;a[],&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;b[][MAXV],&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;c[],&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;ii,&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;jj)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;i,&nbsp;j,&nbsp;k,&nbsp;z;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;tp[MAXV],&nbsp;ret[MAXV],&nbsp;ttp[MAXV];</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;memset(ret,&nbsp;0.0,&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">sizeof</span><font size="2">(ret));</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">for</span><font size="2">&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;MAXV;&nbsp;++i)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(tp,&nbsp;0.0,&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">sizeof</span><font size="2">(tp));</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">for</span><font size="2">&nbsp;(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;MAXV;&nbsp;++j)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tp[0]&nbsp;+=&nbsp;a[j]&nbsp;*&nbsp;(b[j][i]&nbsp;&gt;&gt;&nbsp;24);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tp[1]&nbsp;+=&nbsp;a[j]&nbsp;*&nbsp;((b[j][i]&nbsp;&amp;&nbsp;0x00ffffff)&nbsp;&gt;&gt;&nbsp;16);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tp[2]&nbsp;+=&nbsp;a[j]&nbsp;*&nbsp;((b[j][i]&nbsp;&amp;&nbsp;0x0000ffff)&nbsp;&gt;&gt;&nbsp;8);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tp[3]&nbsp;+=&nbsp;a[j]&nbsp;*&nbsp;(b[j][i]&nbsp;&amp;&nbsp;0x000000ff);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">for</span><font size="2">&nbsp;(k&nbsp;=&nbsp;0;&nbsp;k&nbsp;&lt;&nbsp;MAXV;&nbsp;++k)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret[k]&nbsp;+=&nbsp;c[i]&nbsp;*&nbsp;tp[k];</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;af1&nbsp;=&nbsp;border_color(ret[0]&nbsp;+&nbsp;0.5)&nbsp;&lt;&lt;&nbsp;24;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;r1&nbsp;=&nbsp;border_color(ret[1]&nbsp;+&nbsp;0.5)&nbsp;&lt;&lt;&nbsp;16;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;g1&nbsp;=&nbsp;border_color(ret[2]&nbsp;+&nbsp;0.5)&nbsp;&lt;&lt;&nbsp;8;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;b1&nbsp;=&nbsp;border_color(ret[3]&nbsp;+&nbsp;0.5);</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;af1&nbsp;+&nbsp;r1&nbsp;+&nbsp;g1&nbsp;+&nbsp;b1;</font><br /><font size="2">}</font><br /><br /><span style="font-size: 13px; color: #0000ff; ">void</span><font size="2">&nbsp;echo(</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;*val,&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;len)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;i&nbsp;=&nbsp;0;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">for</span><font size="2">&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;len;&nbsp;++i)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AS3_Trace(AS3_String(toString(val[i])));</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">}</font><br /><br /><span style="font-size: 13px; color: #0000ff; ">static</span><font size="2">&nbsp;AS3_Val&nbsp;biCubic(</font><span style="font-size: 13px; color: #0000ff; ">void</span><font size="2">*&nbsp;self,&nbsp;AS3_Val&nbsp;args)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_Val&nbsp;srcByte,&nbsp;dstByte;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;srcWidth,&nbsp;srcHeight,&nbsp;dstWidth,&nbsp;dstHeight;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_ArrayValue(args,</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"AS3ValType,&nbsp;IntType,&nbsp;IntType,&nbsp;AS3ValType,&nbsp;IntType,&nbsp;IntType",</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;srcByte,&nbsp;&amp;srcWidth,&nbsp;&amp;srcHeight,&nbsp;&amp;dstByte,&nbsp;&amp;dstWidth,&nbsp;&amp;dstHeight);</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;srcLen&nbsp;=&nbsp;srcWidth&nbsp;*&nbsp;srcHeight;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;dstLen&nbsp;=&nbsp;dstWidth&nbsp;*&nbsp;dstHeight;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;*src&nbsp;=&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">new</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">[srcLen];</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;*dst&nbsp;=&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">new</span><font size="2">&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">[dstLen];</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_SetS(srcByte,&nbsp;"position",&nbsp;AS3_Int(0));</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_ByteArray_readBytes(src,&nbsp;srcByte,&nbsp;4&nbsp;*&nbsp;srcLen);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;widthFactor&nbsp;=&nbsp;1.0&nbsp;*&nbsp;srcWidth&nbsp;/&nbsp;dstWidth;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;heightFactor&nbsp;=&nbsp;1.0&nbsp;*&nbsp;srcHeight&nbsp;/&nbsp;dstHeight;</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;i,&nbsp;j,&nbsp;k,&nbsp;z,&nbsp;gf&nbsp;=&nbsp;0;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;tx,&nbsp;ty,&nbsp;u,&nbsp;v;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;x,&nbsp;y;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">double</span><font size="2">&nbsp;A[MAXV],&nbsp;C[MAXV];</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">uint</span><font size="2">&nbsp;B[MAXV][MAXV];</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">for</span><font size="2">&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;dstWidth;&nbsp;++i)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">for</span><font size="2">&nbsp;(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;dstHeight;&nbsp;++j)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx&nbsp;=&nbsp;(i&nbsp;+&nbsp;0.5)&nbsp;*&nbsp;widthFactor&nbsp;-&nbsp;0.5;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ty&nbsp;=&nbsp;(j&nbsp;+&nbsp;0.5)&nbsp;*&nbsp;heightFactor&nbsp;-&nbsp;0.5;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(tx&nbsp;&lt;&nbsp;0)</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx&nbsp;=&nbsp;-tx;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">if</span><font size="2">&nbsp;(ty&nbsp;&lt;&nbsp;0)</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ty&nbsp;=&nbsp;-ty;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;floor(tx);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;floor(ty);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;tx&nbsp;-&nbsp;x;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;=&nbsp;ty&nbsp;-&nbsp;y;</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">for</span><font size="2">&nbsp;(k&nbsp;=&nbsp;0;&nbsp;k&nbsp;&lt;&nbsp;MAXV;&nbsp;++k)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A[k]&nbsp;=&nbsp;SinXDivX(u&nbsp;+&nbsp;1.0&nbsp;-&nbsp;k);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C[k]&nbsp;=&nbsp;SinXDivX(v&nbsp;+&nbsp;1.0&nbsp;-&nbsp;k);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">for</span><font size="2">&nbsp;(z&nbsp;=&nbsp;0;&nbsp;z&nbsp;&lt;&nbsp;MAXV;&nbsp;++z)&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B[k][z]&nbsp;=&nbsp;availablePixel(src,&nbsp;srcWidth,&nbsp;srcHeight,</font><br /><font size="2">&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;x&nbsp;+&nbsp;k&nbsp;-&nbsp;1,&nbsp;y&nbsp;+&nbsp;z&nbsp;-&nbsp;1);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dst[i+j*dstWidth]&nbsp;=&nbsp;MatrixMutiple(A,&nbsp;B,&nbsp;C,&nbsp;i,&nbsp;j);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;}</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #008000; ">//</span><span style="font-size: 13px; color: #008000; ">echo(dst,&nbsp;dstLen);</span><span style="font-size: 13px; color: #008000; "><br /></span><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_SetS(dstByte,&nbsp;"position",&nbsp;AS3_Int(0));</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_ByteArray_writeBytes(dstByte,&nbsp;dst,&nbsp;4&nbsp;*&nbsp;dstLen);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;AS3_True();</font><br /><font size="2">}</font><br /><br /><span style="font-size: 13px; color: #0000ff; ">int</span><font size="2">&nbsp;main()&nbsp;{</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_Val&nbsp;biCubicMethod&nbsp;=&nbsp;AS3_Function(NULL,&nbsp;biCubic);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_Val&nbsp;lib&nbsp;=&nbsp;AS3_Object("biCubic:AS3ValType",&nbsp;biCubicMethod);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_Release(biCubicMethod);</font><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;AS3_LibInit(lib);</font><br /><br /><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font><span style="font-size: 13px; color: #0000ff; ">return</span><font size="2">&nbsp;0;</font><br /><font size="2">}</font><br /><br /><br /><font size="2">as 代码</font><br /><div>package {</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>import cmodule.ImageScaling.CLibInit;</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>import flash.display.Bitmap;</div><div><span style="white-space:pre">	</span>import flash.display.BitmapData;</div><div><span style="white-space:pre">	</span>import flash.display.Sprite;</div><div><span style="white-space:pre">	</span>import flash.display.StageScaleMode;</div><div><span style="white-space:pre">	</span>import flash.geom.Rectangle;</div><div><span style="white-space:pre">	</span>import flash.utils.ByteArray;</div><div><span style="white-space:pre">	</span>import flash.utils.Timer;</div><div></div><div><span style="white-space:pre">	</span>[SWF(width="1000", height="600", backgroundColor="#000000", frameRate="24")]</div><div><span style="white-space:pre">	</span>public class Main extends Sprite {</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>[Embed(source='f_01.png')]</div><div><span style="white-space:pre">		</span>public static const image:Class;</div><div><span style="white-space:pre">		</span>public function Main() {</div><div><span style="white-space:pre">			</span>this.stage.scaleMode = StageScaleMode.NO_SCALE;</div><div><span style="white-space:pre">			</span>var bitmapdata:BitmapData = (new image() as Bitmap).bitmapData;</div><div><span style="white-space:pre">			</span>var t1:Number = (new Date()).time;</div><div><span style="white-space:pre">			</span>var bitmap:Bitmap = new Bitmap(Main.Cubic(bitmapdata, 256, 256));</div><div><span style="white-space:pre">			</span>var t2:Number = (new Date()).time;</div><div><span style="white-space:pre">			</span>trace((t2-t1)+"ms");</div><div><span style="white-space:pre">			</span>this.addChild(bitmap);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>public static function Cubic (bitmapData:BitmapData, scalingWidth:uint, scalingHeight:uint):BitmapData {</div><div><span style="white-space:pre">			</span>var nbd:BitmapData = new BitmapData(scalingWidth, scalingHeight, true, 0xffffffff);</div><div><span style="white-space:pre">			</span>var loader:cmodule.ImageScaling.CLibInit = new cmodule.ImageScaling.CLibInit();</div><div><span style="white-space:pre">			</span>var lib:Object = loader.init();</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">			</span>var byte:ByteArray = bitmapData.getPixels(new Rectangle(0, 0, bitmapData.width, bitmapData.height));</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">			</span>var byte2:ByteArray = nbd.getPixels(new Rectangle(0, 0, scalingWidth, scalingHeight));</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">			</span>lib.biCubic(byte, bitmapData.width, bitmapData.height, byte2, scalingWidth, scalingHeight);</div><div><span style="white-space:pre">			</span>byte2.position = 0;</div><div><span style="white-space:pre">			</span>nbd.setPixels(new Rectangle(0, 0, scalingWidth, scalingHeight), byte2);</div><div><span style="white-space:pre">			</span>return nbd;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div>}</div><br /><br /></div><img src ="http://www.cppblog.com/misschuer/aggbug/186801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2012-08-10 10:11 <a href="http://www.cppblog.com/misschuer/archive/2012/08/10/186801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>as 图片的缩放算法 (二次线性 和 三次卷积) </title><link>http://www.cppblog.com/misschuer/archive/2012/08/07/186538.html</link><dc:creator>此最相思</dc:creator><author>此最相思</author><pubDate>Tue, 07 Aug 2012 01:58:00 GMT</pubDate><guid>http://www.cppblog.com/misschuer/archive/2012/08/07/186538.html</guid><wfw:comment>http://www.cppblog.com/misschuer/comments/186538.html</wfw:comment><comments>http://www.cppblog.com/misschuer/archive/2012/08/07/186538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/misschuer/comments/commentRss/186538.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/misschuer/services/trackbacks/186538.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/housisong/article/details/1452249" target="_blank"><a href="http://blog.csdn.net/housisong/article/details/1452249" target="_blank"><div style="display: inline !important; "><span style="line-height: 20.899999618530273px;">package {</span></div></a><br /><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">	</span>import flash.display.BitmapData;</span></div><div><span style="line-height: 20.899999618530273px; "><span style="white-space:pre">	</span>public class ImageScaling {</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static var PI:Number = Math.PI;</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px; ">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function getA(val:uint):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return val &gt;&gt;&gt; 24;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function getR(val:uint):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return (val &amp; 0x00ffffff) &gt;&gt;&gt; 16;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function getG(val:uint):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return (val &amp; 0x0000ffff) &gt;&gt;&gt; 8;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function getB(val:uint):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return val &amp; 0x000000ff;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function getAA(val:Array):Array {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var ret:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>for (var i:uint = 0; i &lt; 4; ++ i) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>for (var j:uint = 0; j &lt; 4; ++ j) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>ret[ i ][ j ] = val[ i ][ j ] &gt;&gt;&gt; 24;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return ret;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function getRR(val:Array):Array {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var ret:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>for (var i:uint = 0; i &lt; 4; ++ i) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>for (var j:uint = 0; j &lt; 4; ++ j) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>ret[ i ][ j ] = (val[ i ][ j ] &amp; 0x00ffffff) &gt;&gt;&gt; 16;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return ret;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function getGG(val:Array):Array {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var ret:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>for (var i:uint = 0; i &lt; 4; ++ i) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>for (var j:uint = 0; j &lt; 4; ++ j) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>ret[ i ][ j ] = (val[ i ][ j ] &amp; 0x0000ffff) &gt;&gt;&gt; 8;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return ret;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function getBB(val:Array):Array {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var ret:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>for (var i:uint = 0; i &lt; 4; ++ i) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>for (var j:uint = 0; j &lt; 4; ++ j) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>ret[ i ][ j ] = (val[ i ][ j ] &amp; 0x000000ff);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return ret;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function availablePixel (bitmapData:BitmapData, x:uint, y:uint):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var flag:Boolean = true;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>if (x &lt; 0) { x = 0; flag = false; }</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>else if (x &gt;= bitmapData.width) { x = bitmapData.width - 1; flag = false; }</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>else if (y &lt; 0) { y = 0; flag = false; }</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>else if (y &gt;= bitmapData.height) { y = bitmapData.height - 1; flag = false; }</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var ret:uint = bitmapData.getPixel32(x, y);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>if (!flag) ret = ret &amp; 0x00ffffff;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return ret;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function SinXDivX(x:Number):Number {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var a:Number = -1;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>if (x &lt; 0) x = -x;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var x2:Number = x*x;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var x3:Number = x2*x;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>if (x &lt;= 1)</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>return (a + 2) * x3 - (a + 3) * x2 + 1;<span style="white-space:pre">	</span></span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>else if (x &lt;= 2)&nbsp;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>return a * x3 - 5 * a * x2 + 8 * a * x - 4 * a;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return 0;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function getPixels(a:Array, b:Array, c:Array):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var arfa:Array = ImageScaling.getAA(b);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var R:Array = ImageScaling.getRR(b);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var G:Array = ImageScaling.getGG(b);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var B:Array = ImageScaling.getBB(b);</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">			</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var aa:uint = ImageScaling.MatrixMutiple(a, arfa, c) &lt;&lt; 24;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var rr:uint = ImageScaling.MatrixMutiple(a, R, c) &lt;&lt; 16;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var gg:uint = ImageScaling.MatrixMutiple(a, G, c) &lt;&lt; 8;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var bb:uint = ImageScaling.MatrixMutiple(a, B, c);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>//trace (aa + " " + rr + " " + gg + " " + bb);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return aa + rr + gg + bb;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function border_color(Color:Number):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>if (Color &lt;= 0) return uint(0);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>if (Color &gt;= 255) return uint(255);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return uint(Color);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function MatrixMutiple(a:Array, b:Array, c:Array):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var ret:Number = 0;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>for (var i:int = 0; i &lt; 4; ++ i) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>var tmp:Number = 0;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>for (var j:int = 0; j &lt; 4; ++ j) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>tmp += a[ j ] * b[ j ][ i ];</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>ret += c[ i ] * tmp;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return border_color(ret + 0.5);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function thirdConvolution (bitmapData:BitmapData, scalingWidth:uint, scalingHeight:uint):BitmapData {</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">			</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var widthFactor:Number = bitmapData.width / scalingWidth;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var heightFactor:Number = bitmapData.height / scalingHeight;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var i:uint = 0, j:uint = 0;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var nbd:BitmapData = new BitmapData(scalingWidth, scalingHeight, true, 0xffffffff);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>for (i = 0; i &lt; scalingWidth; ++ i) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>for (j = 0; j &lt; scalingHeight; ++ j) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var tx:Number = (i + 0.5) * widthFactor - 0.5;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var ty:Number = (j + 0.5) * heightFactor - 0.5;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>if (tx &lt; 0) tx = -tx;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>if (ty &lt; 0) ty = -ty;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var x:uint = Math.floor(tx);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var y:uint = Math.floor(ty);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var u:Number = tx - x;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var v:Number = ty - y;</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">					</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var A:Array = [0.0, 0.0, 0.0, 0.0];&nbsp;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var B:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];&nbsp;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var C:Array = [0.0, 0.0, 0.0, 0.0];</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">					</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>for (var k:int = 0; k &lt; 4; ++ k) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">						</span>A[ k ] = ImageScaling.SinXDivX(u+1.0-k);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">						</span>C[ k ] = ImageScaling.SinXDivX(v+1.0-k);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">						</span>for (var z:int = 0; z &lt; 4; ++ z) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">							</span>B[ k ][ z ] = ImageScaling.availablePixel(bitmapData, x+k-1, y+z-1);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">						</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">					</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var p:uint = ImageScaling.getPixels(A, B, C);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>nbd.setPixel32(i, j, p);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">			</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return nbd;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function calculator(p:Array, c:Array):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return uint(p[0]*c[0]+p[1]*c[1]+p[2]*c[2]+p[3]*c[3]);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function mixedPixel(p:Array, c:Array):uint {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var aa:Array = [0, 0, 0, 0];</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var ra:Array = [0, 0, 0, 0];</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var ga:Array = [0, 0, 0, 0];</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var ba:Array = [0, 0, 0, 0];</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>for (var i:uint = 0; i &lt; 4; ++ i) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>aa[ i ] = ImageScaling.getA(p[ i ]);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>ra[ i ] = ImageScaling.getR(p[ i ]);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>ga[ i ] = ImageScaling.getG(p[ i ]);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>ba[ i ] = ImageScaling.getB(p[ i ]);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return (ImageScaling.calculator(aa, c) &lt;&lt; 24) + (ImageScaling.calculator(ra, c) &lt;&lt; 16) + (ImageScaling.calculator(ga, c) &lt;&lt; 8) + ImageScaling.calculator(ba, c);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>public static function secondLinear (bitmapData:BitmapData, scalingWidth:uint, scalingHeight:uint):BitmapData {</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">			</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var widthFactor:Number = bitmapData.width / scalingWidth;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var heightFactor:Number = bitmapData.height / scalingHeight;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var i:uint = 0, j:uint = 0;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>var nbd:BitmapData = new BitmapData(scalingWidth, scalingHeight, true, 0xffffffff);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>for (i = 0; i &lt; scalingWidth; ++ i) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>for (j = 0; j &lt; scalingHeight; ++ j) {</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var tx:Number = i * widthFactor - 0.5;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var ty:Number = j * heightFactor - 0.5;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>if (tx &lt; 0) tx = -tx;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>if (ty &lt; 0) ty = -ty;</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">					</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var x:uint = Math.floor(tx);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var y:uint = Math.floor(ty);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var u:Number = tx - x;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var v:Number = ty - y;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var ti:uint = x;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var tj:uint = y;</span></div><div><span style="line-height: 20.899999618530273px;"><br /></span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var p0:uint = ImageScaling.availablePixel(bitmapData, x, y);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var p1:uint = ImageScaling.availablePixel(bitmapData, x, y+1);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var p2:uint = ImageScaling.availablePixel(bitmapData, x+1, y);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var p3:uint = ImageScaling.availablePixel(bitmapData, x+1, y+1);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var pa:Array = [p0, p1, p2, p3];</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">					</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var c0:Number = (1.0-u)*(1.0-v);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var c1:Number = (1.0-u)*v;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var c2:Number = u*(1.0-v);</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var c3:Number = u*v;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>var ca:Array = [c0, c1, c2, c3];</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">					</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">					</span>nbd.setPixel32(i, j, ImageScaling.mixedPixel(pa, ca));</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">				</span>}</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">			</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">			</span>return nbd;</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.899999618530273px;">		</span></div><div><span style="line-height: 20.899999618530273px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 20.899999618530273px;">}</span></div><div><span style="line-height: 20.899999618530273px;"><br /></span></div><div><span style="line-height: 20.899999618530273px;">测试:</span><br /><div><span style="line-height: 20.883333206176758px;">package {</span></div><div><span style="white-space: pre; line-height: 20.883333206176758px;">	</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">	</span>import flash.display.Bitmap;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">	</span>import flash.display.BitmapData;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">	</span>import flash.display.Sprite;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">	</span>import flash.geom.Rectangle;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">	</span>import flash.system.ImageDecodingPolicy;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">	</span>import flash.utils.ByteArray;</span></div><div><span style="line-height: 20.883333206176758px;"><br /></span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">	</span>[SWF(width="1000", height="600", backgroundColor="#cacaca", frameRate="24")]</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">	</span>public class Main extends Sprite {</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">		</span>[Embed(source='dog.png')]</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">		</span>public static const image:Class;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">		</span>public function Main() {</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>var bitmapdata:BitmapData = (new image() as Bitmap).bitmapData</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>var bitmap:Bitmap = new Bitmap(showImage2(bitmapdata));</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>bitmap.x = 0;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>bitmap.y = 0;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>this.addChild(bitmap);</span></div><div><span style="white-space: pre; line-height: 20.883333206176758px;">			</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>var bitmap2:Bitmap = new Bitmap(showImage1(bitmapdata));</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>bitmap2.x = 300;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>bitmap2.y = 300;</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>this.addChild(bitmap2);</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.883333206176758px;">		</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">		</span>public static function showImage1(bitmapdata:BitmapData):BitmapData {</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>return ImageScaling.secondLinear(bitmapdata, 286, 300);</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">		</span>}</span></div><div><span style="white-space: pre; line-height: 20.883333206176758px;">		</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">		</span>public static function showImage2(bitmapdata:BitmapData):BitmapData {</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">			</span>return ImageScaling.thirdConvolution(bitmapdata, 286, 300);</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">		</span>}</span></div><div><span style="line-height: 20.883333206176758px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 20.883333206176758px;">}</span></div><br /><br /><br />__________________________________________________<br /><span style="color: #000000; ">参考</span><a href="http://blog.csdn.net/housisong/article/details/1452249" target="_blank"><span style="font-size: 14.545454025268555px; line-height: 20.909090042114258px; ">h ttp://blog.csdn.net/housisong/article/details/1452249</span></a>&nbsp;<br /></div><div><span style="line-height: 20.899999618530273px;"><br /></span></div><div style="font-family: arial; font-size: 14.545454025268555px; line-height: 20.909090042114258px; "></div></a><img src ="http://www.cppblog.com/misschuer/aggbug/186538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/misschuer/" target="_blank">此最相思</a> 2012-08-07 09:58 <a href="http://www.cppblog.com/misschuer/archive/2012/08/07/186538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>