锘??xml version="1.0" encoding="utf-8" standalone="yes"?>伊人久久综在合线亚洲2019,亚洲综合久久久,合区精品久久久中文字幕一区http://www.shnenglu.com/misschuer/zh-cnSun, 11 May 2025 01:08:23 GMTSun, 11 May 2025 01:08:23 GMT60OpenResty瀹炵幇闄愭祦鐨勫嚑縐嶆柟寮?/title><link>http://www.shnenglu.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.shnenglu.com/misschuer/archive/2018/04/16/215588.html</guid><wfw:comment>http://www.shnenglu.com/misschuer/comments/215588.html</wfw:comment><comments>http://www.shnenglu.com/misschuer/archive/2018/04/16/215588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/misschuer/comments/commentRss/215588.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/misschuer/services/trackbacks/215588.html</trackback:ping><description><![CDATA[     鎽樿: 鏈枃杞嚜:http://www.itzh.org/2018/01/14/openresty_rate_limiter_methods/鍦ㄥ紑鍙?nbsp;api 緗戝叧鐨勬椂錛屽仛榪囦竴浜涚畝鍗曠殑闄愭祦錛屾瘮濡傝闈欐佹嫤鎴拰鍔ㄦ佹嫤鎴紱闈欐佹嫤鎴鐧戒簡灝辨槸闄愭祦鏌愪竴涓帴鍙e湪涓瀹氭椂闂寸獥鍙g殑璇鋒眰鏁般傜敤鎴峰彲浠ュ湪緋葷粺涓婄粰浠栦滑鐨勬帴鍙i厤緗竴涓瘡縐掓渶澶ц皟鐢ㄩ噺錛屽鏋滆秴榪囪繖涓檺鍒訛紝鍒欐嫆緇濇湇鍔℃鎺ュ彛錛岃屽姩鎬佹嫤鎴叾瀹炰篃鏄熀浜庨潤鎬佹嫤鎴?..  <a href='http://www.shnenglu.com/misschuer/archive/2018/04/16/215588.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/misschuer/aggbug/215588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/misschuer/" target="_blank">姝ゆ渶鐩告?/a> 2018-04-16 16:16 <a href="http://www.shnenglu.com/misschuer/archive/2018/04/16/215588.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鏂愭嘗閭e铻烘棆綰?/title><link>http://www.shnenglu.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.shnenglu.com/misschuer/archive/2017/12/11/215419.html</guid><wfw:comment>http://www.shnenglu.com/misschuer/comments/215419.html</wfw:comment><comments>http://www.shnenglu.com/misschuer/archive/2017/12/11/215419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/misschuer/comments/commentRss/215419.html</wfw:commentRss><trackback:ping>http://www.shnenglu.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> Star(0, 0));<br /><br />        <span style="color: #0000FF; ">var</span> origin:Vector2D = <span style="color: #0000FF; ">new</span> Vector2D(0, 0);<br />        <span style="color: #0000FF; ">var</span> stl = [];<br />        <span style="color: #0000FF; ">var</span> v = <span style="color: #0000FF; ">new</span> Vector2D(0, 1);<br />        <span style="color: #0000FF; ">var</span> sp = 4;<br />        <span style="color: #0000FF; ">var</span> rad = 2.0 * Math.PI / sp;<br />        <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">var</span> i = 0; i < sp; ++ i) {<br />            <span style="color: #0000FF; ">var</span> g = rad * i;<br />            <span style="color: #0000FF; ">var</span> ttt = v.clone();<br />            ttt.rotate(g);<br />            stl.push(ttt);<br />        }<br />        <span style="color: #008000; ">//</span><span style="color: #008000; "> var stl = [new Vector2D(0,1), new Vector2D(-1,0), new Vector2D(0,-1), new Vector2D(1,0)];</span><span style="color: #008000; "><br /></span>        <span style="color: #0000FF; ">var</span> vx = [-1, 1, 1, -1];<br />        <span style="color: #0000FF; ">var</span> vy = [-1, -1, 1, 1];<br />        <span style="color: #0000FF; ">var</span> fib = [1, 2, 3, 5, 8, 13, 21];<br />        <span style="color: #008000; ">//</span><span style="color: #008000; "> fib = [1, 2, 3, 4, 5, 6, 7, 8];</span><span style="color: #008000; "><br /></span>        <span style="color: #0000FF; ">var</span> temp:Vector2D = <span style="color: #0000FF; ">new</span> Vector2D();<br />        <span style="color: #0000FF; ">var</span> prev:Vector2D = <span style="color: #0000FF; ">new</span> Vector2D();<br />        <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">var</span> i = 0; i < stl.length; ++ i) {<br />            <span style="color: #008000; ">//</span><span style="color: #008000; "> console.log("------------------");</span><span style="color: #008000; "><br /></span>            <span style="color: #0000FF; ">var</span> s = stl[ i ];<br />            <span style="color: #008000; ">//</span><span style="color: #008000; "> console.log(s.toString());</span><span style="color: #008000; "><br /></span>            <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">var</span> j = 0; j < fib.length; ++ j) {<br />                temp.set45Vector();<br />                <span style="color: #0000FF; ">var</span> vecx = vx[(i+j) & 3];<br />                <span style="color: #0000FF; ">var</span> vecy = vy[(i+j) & 3];<br />                temp.scaleByXY(vecx * fib[ j ], vecy * fib[ j ]);<br /><br />                <span style="color: #0000FF; ">this</span>.stars.push(<span style="color: #0000FF; ">new</span> Star(s.X, s.Y));<br />                s.copyTo(prev);<br />                s.transform(temp);<br />                <span style="color: #0000FF; ">var</span> circleCoordinate:Vector2D = prev.cal45CircleCoordinate(s, (vecy/vecx) > 0);<br />                <span style="color: #008000; ">//</span><span style="color: #008000; "> console.log("circle coordinate", circleCoordinate.toString());</span><span style="color: #008000; "><br /></span>                <br />                <span style="color: #0000FF; ">var</span> size = 7;<br />                <span style="color: #0000FF; ">var</span> rad:number = Math.PI / 2 / size;<br />                <span style="color: #0000FF; ">if</span> (j > -1) {<br />                    <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">var</span> k = 1; k <= size; ++ k) {<br />                        <span style="color: #0000FF; ">var</span> tt:Vector2D = prev.clone();<br />                        tt.transform(circleCoordinate, <span style="color: #0000FF; ">false</span>);<br />                        tt.rotate(rad * k);<br />                        tt.transform(circleCoordinate, <span style="color: #0000FF; ">true</span>);<br />                        <span style="color: #0000FF; ">this</span>.stars.push(<span style="color: #0000FF; ">new</span> Star(tt.X, tt.Y));<br />                        <span style="color: #008000; ">//</span><span style="color: #008000; "> console.log("tt = ", tt.toString());</span><span style="color: #008000; "><br /></span>                    }<br />                }<br />                <span style="color: #008000; ">//</span><span style="color: #008000; "> console.log(s.toString());</span><span style="color: #008000; "><br /></span>            }<br />        }</div><img src ="http://www.shnenglu.com/misschuer/aggbug/215419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/misschuer/" target="_blank">姝ゆ渶鐩告?/a> 2017-12-11 19:33 <a href="http://www.shnenglu.com/misschuer/archive/2017/12/11/215419.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>娉曠嚎鐨勯嗚漿緗煩闃墊帹鍊?杞?http://www.shnenglu.com/misschuer/archive/2017/12/06/215394.html姝ゆ渶鐩告?/dc:creator>姝ゆ渶鐩告?/author>Wed, 06 Dec 2017 03:39:00 GMThttp://www.shnenglu.com/misschuer/archive/2017/12/06/215394.htmlhttp://www.shnenglu.com/misschuer/comments/215394.htmlhttp://www.shnenglu.com/misschuer/archive/2017/12/06/215394.html#Feedback0http://www.shnenglu.com/misschuer/comments/commentRss/215394.htmlhttp://www.shnenglu.com/misschuer/services/trackbacks/215394.htmlTransforming Planes

If we have a plane vector n = [a, b, c, d] which describes a plane then for any point p = [x, y, z, 1] in that plane the follow equation holds:

nt p = ax + by + cz + d = 0

If for a point p on the plane, we apply an invertible transformation R to get the transformed point p1, then the plane vector n1 of the transformed plane is given by applying a corresponding transformation Q to the original plane vector n where Q is unknown.

p1 = R p 
n1
 = Q n 

We can solve for Q by using the resulting plane equation: 

n1t p1 = 0 

Begin by substituting for n1 and p1

(Q n)t (R p) = 0 
nt Qt R p = 0 

If Qt R = I then nt Qt R p = nt I p = nt p = 0 which is given.

Qt R = 
Q
t = R-1 
Q = (R-1)t 

Substituting Q back into our plane vector transformation equation we get: 

n1 = Q n = (R-1)t n



]]>
涓夌淮鏃嬭漿(杞澆)http://www.shnenglu.com/misschuer/archive/2017/12/04/215389.html姝ゆ渶鐩告?/dc:creator>姝ゆ渶鐩告?/author>Mon, 04 Dec 2017 07:50:00 GMThttp://www.shnenglu.com/misschuer/archive/2017/12/04/215389.htmlhttp://www.shnenglu.com/misschuer/comments/215389.htmlhttp://www.shnenglu.com/misschuer/archive/2017/12/04/215389.html#Feedback0http://www.shnenglu.com/misschuer/comments/commentRss/215389.htmlhttp://www.shnenglu.com/misschuer/services/trackbacks/215389.htmlhttp://blog.csdn.net/csxiaoshui/article/details/65446125

]]>
榻愭鍧愭爣鐨勭悊瑙?杞澆鍒漢鐨?http://www.shnenglu.com/misschuer/archive/2017/12/04/215387.html姝ゆ渶鐩告?/dc:creator>姝ゆ渶鐩告?/author>Mon, 04 Dec 2017 06:34:00 GMThttp://www.shnenglu.com/misschuer/archive/2017/12/04/215387.htmlhttp://www.shnenglu.com/misschuer/comments/215387.htmlhttp://www.shnenglu.com/misschuer/archive/2017/12/04/215387.html#Feedback0http://www.shnenglu.com/misschuer/comments/commentRss/215387.htmlhttp://www.shnenglu.com/misschuer/services/trackbacks/215387.html鏉ユ簮 https://www.cnblogs.com/csyisong/archive/2008/12/09/1351372.html


 涓鐩村榻愭鍧愭爣榪欎釜姒傚康鐨勭悊瑙d笉澶熷交搴曪紝鍙澶ч儴鍒嗙殑涔︿腑璇撮亾“榻愭鍧愭爣鍦ㄤ豢灝勫彉鎹腑闈炲父鐨勬柟渚?#8221;錛岀劧鍚庡氨娌℃湁浜嗗悗鏂囷紝浠婂ぉ鍦ㄤ竴涓彨鍋?#8220;涓夌櫨騫?閲嶇敓”鐨勫崥瀹笂鐪嬪埌涓綃囧叧浜庨忚鎶曞獎鍙樻崲鐨勬帰璁ㄧ殑鏂囩珷錛屽叾涓湁瀵歸綈嬈″潗鏍囨湁闈炲父綺捐緹鐨勮鏄庯紝鐗瑰埆鏄拡瀵硅繖鏍蜂竴鍙ヨ瘽榪涜浜嗘湁鍔涚殑璇佹槑錛?em style="margin: 0px; padding: 0px;">“榻愭鍧愭爣琛ㄧず鏄綆楁満鍥懼艦瀛︾殑閲嶈鎵嬫涔嬩竴錛屽畠鏃㈣兘澶熺敤鏉ユ槑紜尯鍒嗗悜閲忓拰鐐癸紝鍚屾椂涔熸洿鏄撶敤浜庤繘琛屼豢灝勶紙綰挎э級鍑犱綍鍙樻崲銆?#8221;—— F.S. Hill, JR銆?/p>

     鐢變簬浣滆呭榻愭鍧愭爣鐪熺殑瑙i噴鐨勪笉閿欙紝鎴戝氨鍘熷皝涓嶅姩鐨勬憳鎶勮繃鏉ワ細

     瀵逛簬涓涓?/span>鍚戦噺v浠ュ強鍩?/span>oabc錛?span style="margin: 0px; padding: 0px; font-size: 12pt; font-family: "Times New Roman";">鍙互鎵懼埌涓緇勫潗鏍?/span>(v1,v2,v3)錛屼嬌寰?/span>v = v1 a + v2 b + v3 c          錛?/span>1錛?/span>

 鑰屽浜庝竴涓?/span>鐐?/em>p錛屽垯鍙互鎵懼埌涓緇勫潗鏍囷紙p1,p2,p3錛夛紝浣垮緱 p – o = p1 a + p2 b + p3 c            錛?/strong>2錛夛紝

 

浠庝笂闈㈠鍚戦噺鍜?/span>鐐?/em>鐨勮〃杈撅紝鎴戜滑鍙互鐪嬪嚭涓轟簡鍦ㄥ潗鏍囩郴涓〃紺轟竴涓?/span>鐐?/em>錛堝p錛夛紝鎴戜滑鎶婄偣鐨勪綅緗湅浣滄槸瀵硅繖涓熀鐨勫師鐐?/span>o鎵榪涜鐨勪竴涓綅縐伙紝鍗充竴涓悜閲?#8212;—p – o錛堟湁鐨勪功涓妸榪欐牱鐨勫悜閲忓彨鍋?em style="margin: 0px; padding: 0px;">浣嶇疆鍚戦噺——璧峰浜庡潗鏍囧師鐐圭殑鐗規畩鍚戦噺錛夛紝鎴戜滑鍦ㄨ〃杈捐繖涓悜閲忕殑鍚屾椂鐢ㄧ瓑浠風殑鏂瑰紡琛ㄨ揪鍑轟簡鐐?/span>p錛?strong style="margin: 0px; padding: 0px;">o + p1 a + p2 b + p3 c (3)

 

(1)(3)鏄潗鏍囩郴涓嬭〃杈句竴涓?/span>鍚戦噺鍜?em style="margin: 0px; padding: 0px;">鐐?/em>鐨勪笉鍚岃〃杈炬柟寮忋傝繖閲屽彲浠ョ湅鍑猴紝铏界劧閮芥槸鐢ㄤ唬鏁板垎閲忕殑褰㈠紡琛ㄨ揪鍚戦噺鍜岀偣錛屼絾琛ㄨ揪涓涓偣姣斾竴涓悜閲忛渶瑕侀澶栫殑淇℃伅銆傚鏋滄垜鍐欏嚭涓涓唬鏁板垎閲忚〃杈?/span>(1, 4, 7)錛岃皝鐭ラ亾瀹冩槸涓悜閲忚繕鏄釜鐐癸紒

    鎴戜滑鐜板湪鎶婏紙1錛夛紙3錛夊啓鎴愮煩闃電殑褰㈠紡錛?span style="margin: 0px; padding: 0px; font-size: 12pt; color: red;">v = (v1 v2 v3 0) X (a b c o)

p = (p1 p2 p3 1) X (a b c o),榪欓噷(a,b,c,o)鏄潗鏍囧熀鐭╅樀錛屽彸杈圭殑鍒楀悜閲忓垎鍒槸鍚戦噺v鍜岀偣p鍦ㄥ熀涓嬬殑鍧愭爣銆?/span>榪欐牱錛屽悜閲忓拰鐐瑰湪鍚屼竴涓熀涓嬪氨鏈変簡涓嶅悓鐨勮〃杈撅細3D鍚戦噺鐨勭4涓唬鏁板垎閲忔槸0錛岃?/span>3D鐐?/span>鐨勭4涓唬鏁板垎閲忔槸1銆傚儚榪欑榪欑鐢?/span>4涓唬鏁板垎閲忚〃紺?/span>3D鍑犱綍姒傚康鐨勬柟寮忔槸涓縐嶉綈嬈″潗鏍囪〃紺恒?/span>

 

榪欐牱錛屼笂闈㈢殑(1, 4, 7)濡傛灉鍐欐垚錛?/span>1,4,7,0錛夛紝瀹冨氨鏄釜鍚戦噺錛涘鏋滄槸(1,4,7,1)錛屽畠灝辨槸涓偣銆?/span>涓嬮潰鏄浣曞湪鏅氬潗鏍?/span>(Ordinary Coordinate)鍜岄綈嬈″潗鏍?/span>(Homogeneous Coordinate)涔嬮棿榪涜杞崲錛?/span>

(1)浠庢櫘閫氬潗鏍囪漿鎹㈡垚榻愭鍧愭爣鏃?/span>

   濡傛灉(x,y,z)鏄釜鐐癸紝鍒欏彉涓?/span>(x,y,z,1);

   濡傛灉(x,y,z)鏄釜鍚戦噺錛屽垯鍙樹負(x,y,z,0)

(2)浠庨綈嬈″潗鏍囪漿鎹㈡垚鏅氬潗鏍囨椂   

   濡傛灉鏄?/span>(x,y,z,1)錛屽垯鐭ラ亾瀹冩槸涓偣錛屽彉鎴?/span>(x,y,z);

   濡傛灉鏄?/span>(x,y,z,0)錛屽垯鐭ラ亾瀹冩槸涓悜閲忥紝浠嶇劧鍙樻垚(x,y,z)

 

浠ヤ笂鏄氳繃榻愭鍧愭爣鏉ュ尯鍒嗗悜閲忓拰鐐圭殑鏂瑰紡銆備粠涓彲浠ユ濊冨緱鐭ワ紝瀵逛簬騫崇ЩT銆佹棆杞?/span>R銆佺緝鏀?/span>S榪?/span>3涓渶甯歌鐨勪豢灝勫彉鎹紝騫崇Щ鍙樻崲鍙浜庣偣鎵嶆湁鎰忎箟錛屽洜涓烘櫘閫氬悜閲忔病鏈変綅緗蹇碉紝鍙湁澶у皬鍜屾柟鍚?

 

鑰屾棆杞拰緙╂斁瀵逛簬鍚戦噺鍜岀偣閮芥湁鎰忎箟錛屼綘鍙互鐢ㄧ被浼間笂闈㈤綈嬈¤〃紺烘潵媯嫻嬨備粠涓彲浠ョ湅鍑猴紝榻愭鍧愭爣鐢ㄤ簬浠垮皠鍙樻崲闈炲父鏂逛究銆?/span>

 

姝ゅ錛屽浜庝竴涓櫘閫氬潗鏍囩殑鐐?/em>P=(Px, Py, Pz)錛屾湁瀵瑰簲鐨勪竴鏃忛綈嬈″潗鏍?/span>(wPx, wPy, wPz, w)錛屽叾涓?/span>w涓嶇瓑浜庨浂銆傛瘮濡傦紝P(1, 4, 7)鐨勯綈嬈″潗鏍囨湁(1, 4, 7, 1)銆侊紙2, 8, 14, 2錛夈侊紙-0.1, -0.4, -0.7, -0.1錛夌瓑絳?/span>銆?/span>鍥犳錛屽鏋滄妸涓涓偣浠庢櫘閫氬潗鏍囧彉鎴愰綈嬈″潗鏍囷紝緇?/span>x,y,z涔樹笂鍚屼竴涓潪闆舵暟w錛岀劧鍚庡鍔犵4涓垎閲?/span>w錛涘鏋滄妸涓涓綈嬈″潗鏍囪漿鎹㈡垚鏅氬潗鏍囷紝鎶?/span>鍓嶄笁涓潗鏍囧悓鏃墮櫎浠ョ4涓潗鏍囷紝鐒跺悗鍘繪帀絎?/span>4涓垎閲忋?/span>

 

鐢變簬榻愭鍧愭爣浣跨敤浜?/span>4涓垎閲忔潵琛ㄨ揪3D姒傚康錛屼嬌寰楀鉤縐誨彉鎹㈠彲浠ヤ嬌鐢ㄧ煩闃佃繘琛岋紝浠庤屽F.S. Hill, JR鎵璇達紝浠垮皠錛堢嚎鎬э級鍙樻崲鐨勮繘琛?/span>鏇村姞鏂逛究銆傜敱浜庡浘褰㈢‖浠跺凡緇忔櫘閬嶅湴鏀寔榻愭鍧愭爣涓庣煩闃典箻娉曪紝鍥犳鏇村姞淇冭繘浜嗛綈嬈″潗鏍囦嬌鐢紝浣垮緱瀹冧技涔庢垚涓哄浘褰㈠涓殑涓涓爣鍑嗐?/span>

 

   浠ヤ笂寰堝ソ鐨勯槓閲婁簡榻愭鍧愭爣鐨勪綔鐢ㄥ強榪愮敤榻愭鍧愭爣鐨勫ソ澶勩傚叾瀹炲湪鍥懼艦瀛︾殑鐞嗚涓紝寰堝宸茬粡琚皝瑁呯殑濂界殑API涔熸槸寰堟湁鐮旂┒鐨勶紝瑕佹兂鎴愪負涓鍚嶄笓涓氱殑璁$畻鏈?/span>鍥懼艦瀛?/span>鐨?/span>瀛︿範鑰咃紝闄や簡鐭ュ叾鐒跺繀欏昏繕寰楃煡鍏舵墍浠ョ劧銆?/span>榪欐牱鍦ㄩ亣鍒伴棶棰樼殑鏃跺欐墠鑳借繀閫熷畾浣嶉棶棰樼殑鏍規簮錛屼粠鑰岃В鍐抽棶棰樸?/span>



]]>
瀵硅薄姹?濂楃敤浜嗙綉涓婄殑涓涓湁BUG浠g爜 鑷繁琛ュ厖鐨?娌″疄闄呯敤榪?http://www.shnenglu.com/misschuer/archive/2015/05/18/210686.html姝ゆ渶鐩告?/dc:creator>姝ゆ渶鐩告?/author>Mon, 18 May 2015 10:49:00 GMThttp://www.shnenglu.com/misschuer/archive/2015/05/18/210686.htmlhttp://www.shnenglu.com/misschuer/comments/210686.htmlhttp://www.shnenglu.com/misschuer/archive/2015/05/18/210686.html#Feedback0http://www.shnenglu.com/misschuer/comments/commentRss/210686.htmlhttp://www.shnenglu.com/misschuer/services/trackbacks/210686.htmlimport java.util.Enumeration;
import java.util.Vector;

public class ObjectPool {

    private static final boolean PRINTABLE = true;
    private Class<?> clazz = null;
    private int numObjects = 10;
    private int maxObjects = 50;
    private Vector<PooledObject> objects = null;
    
    public static void main(String[] args) throws Exception {

        ObjectPool pool = new ObjectPool(XX.class);
        pool.createPool();
        
        XX xx = (XX) pool.getObject();
        xx.reset();
        xx.setAge(1);
        xx.setSex("M");
        
        pool.returnObject(xx);
        pool.closeObjectPool();
    }
    
    
    public ObjectPool(Class<?> clazz) {
        
        this.clazz = clazz;
    }
    
    public synchronized void createPool() throws Exception {
        
        if (this.objects != null)
            return;
        
        this.objects = new Vector<PooledObject>();
        for (int i = 0; i < this.numObjects; ++ i) {
            
            createObjects();
        }
    }
    
    
    public synchronized Object getObject() throws Exception {
        
        if (this.objects == null)
            return null;
        
        Object conn = this.getFreeObject();
        
        while (conn == null) {
            wait(250);
            conn = this.getFreeObject();
        }
        
        return conn;
    }
    
    
    private Object getFreeObject() throws Exception {
        
        Object obj = this.findFreeObject();
        
        if (obj == null) {
            
            this.createObjects();
            obj = this.findFreeObject();
            if (obj == null) {
                
                return null;
            }
        }
        
        return obj;
    }
    
    private void createObjects() throws Exception {
        
        if (this.objects.size() < this.maxObjects) {
            
            this.message("created" + this.objects.size());
            Object obj = this.clazz.newInstance();
            this.objects.addElement(new PooledObject(this.objects.size(), obj));
        }
    }
    
    
    private Object findFreeObject() {
        
        this.message("before free:--------");
        this.print();
        Object obj = null;
        PooledObject pooledObject = null;
        Enumeration<PooledObject> enumerate = objects.elements();
        while (enumerate.hasMoreElements()) {
            
            pooledObject = (PooledObject) enumerate.nextElement();
            if (!pooledObject.isBusy()) {
                
                pooledObject.setBusy(true);
                obj = pooledObject.getObject();
                this.message("free object");
                break;
            }
        }
        
        this.message("after free:--------");
        this.print();
        
        return obj;
    }
    
    
    public void returnObject(Object obj) {
        
        if (this.objects == null)
            return;
        
        this.message("before return:--------");
        this.print();
        PooledObject pooledObject = null;
        Enumeration<PooledObject> enumerate = objects.elements();
        while (enumerate.hasMoreElements()) {
            
            pooledObject = (PooledObject) enumerate.nextElement();
            if (obj == pooledObject.getObject()) {
                
                pooledObject.setBusy(false);
                this.message("return object");
                break;
            }
        }
        this.message("after return:--------");
        this.print();
    }
    
    
    public synchronized void closeObjectPool() {
        
        if (this.objects == null)
            return;
        
        PooledObject pooledObject = null;
        Enumeration<PooledObject> enumerate = objects.elements();
        while (enumerate.hasMoreElements()) {
            
            pooledObject = (PooledObject) enumerate.nextElement();
            this.message(pooledObject.toString());
            if (pooledObject.isBusy()) {
                this.message("wait 5000");
                wait(5000);
            }
        }

        this.objects.clear();
        this.objects = null;
    }
    
    
    private void wait(int millionSeconds) {
        
        try {
            Thread.sleep(millionSeconds);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    
    public void print() {
        
        Enumeration<PooledObject> enumerate = objects.elements();
        while (enumerate.hasMoreElements()) {
            
            PooledObject pooledObject = (PooledObject) enumerate.nextElement();
            this.message(pooledObject.toString());
        }
        
        this.message("print end==============================");
    }
    
    
    public void message(String msg) {
        
        if (PRINTABLE) {
            System.out.println(msg);
        }
    }
    
    
    class PooledObject {     
        
        private int index = 0;
        Object objection = null;// 瀵硅薄     
        boolean busy = false// 姝ゅ璞℃槸鍚︽鍦ㄤ嬌鐢ㄧ殑鏍囧織錛岄粯璁ゆ病鏈夋鍦ㄤ嬌鐢?nbsp;    

        
// 鏋勯犲嚱鏁幫紝鏍規嵁涓涓?nbsp;Object 鏋勫憡涓涓?nbsp;PooledObject 瀵硅薄     
        public PooledObject(int index, Object objection) {     

            this.index = index;
            this.objection = objection;
            this.busy = false;
        }     

        // 榪斿洖姝ゅ璞′腑鐨勫璞?nbsp;    
        public Object getObject() {     
            return objection;     
        }     

        // 璁劇疆姝ゅ璞$殑錛屽璞?nbsp;    
        public void setObject(Object objection) {     
            this.objection = objection;     

        }     

        // 鑾峰緱瀵硅薄瀵硅薄鏄惁蹇?nbsp;    
        public boolean isBusy() {     
            return busy;     
        }     

        // 璁劇疆瀵硅薄鐨勫璞℃鍦ㄥ繖     
        public void setBusy(boolean busy) {     
            this.busy = busy;     
        }

        public int getIndex() {
            return index;
        }

        public void setIndex(int index) {
            this.index = index;
        }
        
        @Override
        public String toString() {
            
            return String.format("[PooledObject] index:%d, busy:%b", this.index, this.busy);
        }
    } 
}


class XX {
    
    private int age = 0;
    private String sex = "";
    
    public XX() {
        
    }
    
    public void reset() {
        
        this.age = 0;
        this.sex = "";
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

]]>
centos涓婅繍琛宩nihttp://www.shnenglu.com/misschuer/archive/2015/05/07/210572.html姝ゆ渶鐩告?/dc:creator>姝ゆ渶鐩告?/author>Thu, 07 May 2015 09:14:00 GMThttp://www.shnenglu.com/misschuer/archive/2015/05/07/210572.htmlhttp://www.shnenglu.com/misschuer/comments/210572.htmlhttp://www.shnenglu.com/misschuer/archive/2015/05/07/210572.html#Feedback0http://www.shnenglu.com/misschuer/comments/commentRss/210572.htmlhttp://www.shnenglu.com/misschuer/services/trackbacks/210572.htmlimport java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.StringTokenizer;


public class Test {

    public static native void hello();
        static final String LIBFILENAME = "/home/my/java/libtest.so";

    static {
        //System.loadLibrary(LIBFILENAME);

        try {
            // 鑾峰彇鍒癹ava.library.path  鍙婄郴緇熷彉閲忎腑Path涓殑鍐呭
            String libpath = System.getProperty("java.library.path");
            if (libpath == null || libpath.length() == 0) {
                throw new RuntimeException("java.library.path is null");
            }
            //javaBinPath   jdk鐨刡in鐩綍D:\Program Files\Java\jdk1.6.0_11\bin
            String javaBinPath = null;
            StringTokenizer st = new StringTokenizer(libpath,
                    System.getProperty("path.separator"));
            if (st.hasMoreElements()) {
                javaBinPath = st.nextToken();
            } else {
                throw new RuntimeException("can not split library path:"
                        + libpath);
            }
            // 鎶奷ll鏂囦歡鍐欏叆鍒癹ava.library.path涓dll鏀懼湪ConvertWord2HM鐩稿悓鐩綍涓嬶紝榪欎釜鍙互鏄綘鐨勭被鍚?/span>
            InputStream inputStream = Test.class.getResourceAsStream(
                    LIBFILENAME);
            final File dllFile = new File(LIBFILENAME);
            if (!dllFile.exists()) {
                FileOutputStream outputStream = new FileOutputStream(dllFile);
                byte[] array = new byte[1024];
                int bytesRead = -1;
                while ((bytesRead = inputStream.read(array)) != -1) {
                    outputStream.write(array, 0, bytesRead);
                }
                outputStream.flush();
                outputStream.close();
            }  
            // 鍔ㄦ佸姞杞絛ll
            System.load(dllFile.getPath());
            // 鍦ㄨ櫄鎷熸満鍏抽棴鐨勬椂鍊欏垹闄ll 榪欓噷鐪嬬潃鐢ㄥ惂
            // dllFile.deleteOnExit();
        } catch (Throwable e) {
            throw new RuntimeException("load Convert.dll error!", e);
        }

    }
    public static void main(String[] args) {
        Test.hello();
    }
}


榪欎釜鏂囦歡鏄湪鐩綍/home/my/java涓嬬殑
javac Test.java
javah Test  //鐢熸垚Test.h
鐒跺悗鑷繁鍐橳est.cpp
.java .h .cpp 榪欎簺鏂囦歡鍚嶅瓧涓瀹氳涓鏍?br />
g++ -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -fPIC -shared -o libtest.so Test.cpp  // 杞垚浣犳兂瑕佺殑鏂囦歡 鎴戣繖閲屾槸libtest.so 涔熷彲浠ユ槸libtest.dll, 鐪嬩綘浠g爜璋冪敤浠涔堛?br />java Test 灝卞彲浠ヨ繍琛屼簡
鐢⊿ystem.loadLibrary() 涓鐩村姞杞戒笉浜?鍙兘緗戜笂鎵句簡涓姞杞絣ib鐨勪唬鐮?/div>


]]>
python3鐨勪竴浜涘寘璇存槑http://www.shnenglu.com/misschuer/archive/2013/11/20/204350.html姝ゆ渶鐩告?/dc:creator>姝ゆ渶鐩告?/author>Wed, 20 Nov 2013 03:44:00 GMThttp://www.shnenglu.com/misschuer/archive/2013/11/20/204350.htmlhttp://www.shnenglu.com/misschuer/comments/204350.htmlhttp://www.shnenglu.com/misschuer/archive/2013/11/20/204350.html#Feedback0http://www.shnenglu.com/misschuer/comments/commentRss/204350.htmlhttp://www.shnenglu.com/misschuer/services/trackbacks/204350.html
瀵逛簬ubuntu 12.04LST 瀹夎PIL (https://github.com/sloonz/pil-py3k)闇瑕? 
璇存槑(http://pillow.readthedocs.org/en/latest/installation.html#linux-installation)
libjpeg8
libjpeg8-dev
libfreetype6
libfreetype6-dev 
zlib1g-dev 
libtiff4-dev
liblcms1-dev
libwebp-dev
tcl8.5-dev
tk8.5-dev

涓瀹氳絳夋墍鏈夋墍闇妯″潡瑁呭ソ 騫朵笖 鐪嬩笅榪欎釜(http://jj.isgeek.net/2011/09/install-pil-with-jpeg-support-on-ubuntu-oneiric-64bits/)
鐒跺悗鍐嶈PIL
鍐嶈創涓嬬綉涓婃湁濂藉績浜哄啓鐨?鐢熸垚楠岃瘉鐮佺殑渚嬪瓙

#Fly web app - Verification Code
# -*- coding: utf-8 -*-
import random
from io import BytesIO
import Image, ImageDraw, ImageFont
# 鐗瑰埆娉ㄦ剰 from PIL import Image 鍜?import Image鐨勫尯鍒?鐢變簬PIL鍖呴兘鏄痠mport xxx 鎵浠ユ垜浠笉鑳藉啓鎴恌rom xxx import yyy
class VCode:
    def __init__(self,size=(100,30),length=4,font='',
                 font_color=(51,102,204),font_size=25,font_bg=(255,255,255),
                 line=(3,5),pointBorder = (50,47),save_type= 'JPEG',quality=100):
        """
        楠岃瘉鐮佺敓鎴愮被
        鍙傛暟:
            size -  鍥劇墖楂樺(width,height)
            length - 楠岃瘉鐮侀暱搴?/div>
            font - 瀛椾綋璺緞
            font_color - 瀛椾綋棰滆壊(鍏佽鏄? #FF0000 鎴?RGB)
            font_size - 瀛椾綋澶у皬
            font_bg - 鑳屾櫙棰滆壊
            line - 騫叉壈綰?(鏈灝戯紝鏈澶?
            pointBorder - 鏁g偣(瓚婂ぇ瓚婂錛岃秺澶ц秺灝?
            save_type - 淇濆瓨綾誨瀷
            quality - 鍝佽川
        """
        self._size = size
        self._font = font
        self._font_color = self._str_hex(font_color)
        self._font_size = font_size
        self._length = length
        self._font_bg = self._str_hex(font_bg)
        self._save_type = save_type
        self._quality = quality
        #鍒濆鍖?/div>
        self._im = None
        self._draw = None
        self._code = ''
        self._char = 'abcdefghkmnprstuvwyzABCDEFGHKLMNPRSTUVWYZ23456789'
        self._pointBorder = pointBorder
        self._line = line
    def Generate(self):
        """鐢熸垚楠岃瘉鐮侊紝騫惰繑鍥炲浘鍍忓唴瀹癸紝鍜岄獙璇佺爜"""
        #鐢熸垚code
        random_code = self._randomCode()
        self._code =  '%s' % ''.join(random_code)
        code_str = '%s' % ' '.join(random_code)
        #鍥懼儚瀵硅薄
        self._im = Image.new('RGB',self._size,self._font_bg)
        self._draw = ImageDraw.ImageDraw(self._im)
        imFont = ImageFont.truetype(self._font,self._font_size)
        w,h = imFont.getsize(self._code)
        xy = ((self._size[0]-w)/2,(self._size[1]-h)/2)
        self._draw.text(xy,code_str,fill=self._font_color,font=imFont)
        #鐢誨共鎵扮偣
        self._createPoints()
        #鐢誨共鎵扮嚎
        self._createLines()
        #file瀵硅薄
        fp = BytesIO()
        #淇濆瓨鍥懼儚
        self._im.save(fp,self._save_type,quality=self._quality)
        return fp.getvalue(),self._code
    def _str_hex(self,color):
        """杞崲棰滆壊鍊間負RGB"""
        if type(color) is str:
            color = color.replace('#','')
            temp_color = (int(color[0:2],16),int(color[2:4],16),int(color[4:6],16))
        else:
            temp_color = color
        return temp_color
    def _randomCode(self):
        """鐢熸垚闅忔満code """
        return random.sample(self._char,self._length)
    def _createPoints(self):
        """鐢葷偣"""
        for x in range(self._size[0]):
            for y in range(self._size[1]):
                flag = random.randint(0, self._pointBorder[0])
                if flag > self._pointBorder[1]:
                    self._draw.point((x, y), fill = self._randomRGB())
                del flag
    def _createLines(self):
        """鐢誨共鎵扮嚎"""
        lineNum = random.randint(self._line[0], self._line[1])
        for i in range(lineNum):
            begin = (random.randint(0, self._size[0]),
                     random.randint(0, self._size[1])
            )
            end = (random.randint(0, self._size[0]),
                   random.randint(0, self._size[1])
            )
            self._draw.line([begin, end], fill = self._randomRGB())
    def _randomRGB(self):
        """闅忔満鐢熸垚RGB"""
        return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
if __name__ == "__main__":
verification = VCode(font='font/ARLRDBD.TTF')
im, code = verification.Generate()
with open("test.jpeg", "wb") as f:
f.write(im)
print(code)


鐢╰ornado  render html鏄?html閲岀殑python 浠g爜


Tornado鐨勬ā鏉挎敮鎸佹帶鍒惰鍙ュ拰琛ㄨ揪璇彞錛屾帶鍒惰鍙ユ槸浣跨敤 {% 鍜?nbsp;%} 鍖呰搗鏉ョ殑錛屼緥濡?nbsp;{% if len(items) > 2 %} 銆傝〃杈捐鍙ユ槸浣跨敤 {{ 鍜?nbsp;}} 鍖呰搗鏉ョ殑錛屼緥濡?nbsp;{{ items[0] }} 銆?/p>

鎺у埗璇彞鍜屽搴旂殑Python璇彞鐨勬牸寮忓熀鏈畬鍏ㄧ浉鍚屻傛垜浠敮鎸?nbsp;if 銆?nbsp;for 銆?nbsp;while 鍜?nbsp;try 錛岃繖浜涜鍙ラ昏緫緇撴潫鐨勪綅緗渶瑕佺敤 {% end %} 鍋氭爣璁?br />

鍥劇墖鍐呭鏃犻渶淇濆瓨鍒?jpeg涓? 鍏蜂綋鍙傝冧笅闈?br />http://en.wikipedia.org/wiki/Data_URI_scheme#HTML


鏄敤mako鏉ュ湪html宓屽python浠g爜
http://blog.csdn.net/luanruisong/article/details/9414635



]]>alchemy c 鍥懼儚鐨勭緝鏀? (涓夋鍗風Н)http://www.shnenglu.com/misschuer/archive/2012/08/10/186801.html姝ゆ渶鐩告?/dc:creator>姝ゆ渶鐩告?/author>Fri, 10 Aug 2012 02:11:00 GMThttp://www.shnenglu.com/misschuer/archive/2012/08/10/186801.htmlhttp://www.shnenglu.com/misschuer/comments/186801.htmlhttp://www.shnenglu.com/misschuer/archive/2012/08/10/186801.html#Feedback0http://www.shnenglu.com/misschuer/comments/commentRss/186801.htmlhttp://www.shnenglu.com/misschuer/services/trackbacks/186801.html鍦╝lchemy c涓繘琛屽浘鐗囩殑緙╂斁
浼犺繘鐨勬槸byteArray 浼犲嚭鐨勪篃鏄痓yteArray 鍗冧竾涓嶈鍦╝lchemy c 涓as鐨勫璞¤繘琛屽嚱鏁拌皟鐢?閭f牱閫熷害寰堟參.... 杈句笉鍒扮偧閲戞湳鐨勬晥鏋?.. 
濂藉惂 浠g爜 鑷繁鐪嬪惂 榪樻槸姣旇緝綆鍗曠殑
alchemy c 浠g爜

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "AS3.h"
typedef unsigned int uint;
#define MAXV 4
using namespace std;

double SinXDivX(double x) {
    double a = -1;
    if (x < 0)
        x = -x;
    double x2 = x * x;
    double x3 = x2 * x;
    if (x <= 1)
        return (a + 2) * x3 - (a + 3) * x2 + 1;
    else if (x <= 2)
        return a * x3 - 5 * a * x2 + 8 * a * x - 4 * a;
    return 0;
}

uint availablePixel(uint *src, int srcWidth, int srcHeight, int x, int y) {
    bool flag = true;
    if (x < 0) {
        x = 0;
        flag = false;
    } else if (x >= srcWidth) {
        x = srcWidth - 1;
        flag = false;
    }
    if (y < 0) {
        y = 0;
        flag = false;
    } else if (y >= srcHeight) {
        y = srcHeight - 1;
        flag = false;
    }
    int lenth = srcWidth * srcHeight;
    int in = x + y*srcWidth;
    uint ret = src[in];
    if (!flag)
        ret = ret & 0x00ffffff;
    return ret;
}

uint border_color(double Color) {
    if (Color <= 0)
        return uint(0);
    if (Color >= 255)
        return uint(255);
    return uint(Color);
}

char *strreverse(char *a) {
    char r[10] = { 0 };
    int i, j;
    for (i = 0, j = strlen(a) - 1; a[i]; ++i, --j) {
        r[j] = a[i];
    }
    return r;
}

char *toString(uint val) {
    char a[10] = { 0 };
    char ch[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
            'C', 'D', 'E', 'F' };
    int i = 0, rt;
    if (val == 0)
        a[0] = '0';
    while (val) {
        rt = val % 16;
        val >>= 4;
        a[i++] = ch[rt];
    }
    return strreverse(a);
}

uint MatrixMutiple(double a[], uint b[][MAXV], double c[], int ii, int jj) {
    int i, j, k, z;
    double tp[MAXV], ret[MAXV], ttp[MAXV];
    memset(ret, 0.0, sizeof(ret));

    for (i = 0; i < MAXV; ++i) {
        memset(tp, 0.0, sizeof(tp));
        for (j = 0; j < MAXV; ++j) {
            tp[0] += a[j] * (b[j][i] >> 24);
            tp[1] += a[j] * ((b[j][i] & 0x00ffffff) >> 16);
            tp[2] += a[j] * ((b[j][i] & 0x0000ffff) >> 8);
            tp[3] += a[j] * (b[j][i] & 0x000000ff);
        }
        for (k = 0; k < MAXV; ++k) {
            ret[k] += c[i] * tp[k];
        }
    }

    uint af1 = border_color(ret[0] + 0.5) << 24;
    uint r1 = border_color(ret[1] + 0.5) << 16;
    uint g1 = border_color(ret[2] + 0.5) << 8;
    uint b1 = border_color(ret[3] + 0.5);

    return af1 + r1 + g1 + b1;
}

void echo(uint *val, int len) {
    int i = 0;
    for (i = 0; i < len; ++i) {
        AS3_Trace(AS3_String(toString(val[i])));
    }
}

static AS3_Val biCubic(void* self, AS3_Val args) {
    AS3_Val srcByte, dstByte;
    int srcWidth, srcHeight, dstWidth, dstHeight;
    AS3_ArrayValue(args,
            "AS3ValType, IntType, IntType, AS3ValType, IntType, IntType",
            &srcByte, &srcWidth, &srcHeight, &dstByte, &dstWidth, &dstHeight);

    int srcLen = srcWidth * srcHeight;
    int dstLen = dstWidth * dstHeight;
    uint *src = new uint[srcLen];
    uint *dst = new uint[dstLen];

    AS3_SetS(srcByte, "position", AS3_Int(0));
    AS3_ByteArray_readBytes(src, srcByte, 4 * srcLen);
    double widthFactor = 1.0 * srcWidth / dstWidth;
    double heightFactor = 1.0 * srcHeight / dstHeight;

    int i, j, k, z, gf = 0;
    double tx, ty, u, v;
    int x, y;
    double A[MAXV], C[MAXV];
    uint B[MAXV][MAXV];
    for (i = 0; i < dstWidth; ++i) {
        for (j = 0; j < dstHeight; ++j) {
            tx = (i + 0.5) * widthFactor - 0.5;
            ty = (j + 0.5) * heightFactor - 0.5;
            if (tx < 0)
                tx = -tx;
            if (ty < 0)
                ty = -ty;
            x = floor(tx);
            y = floor(ty);
            u = tx - x;
            v = ty - y;
            for (k = 0; k < MAXV; ++k) {
                A[k] = SinXDivX(u + 1.0 - k);
                C[k] = SinXDivX(v + 1.0 - k);
                for (z = 0; z < MAXV; ++z) {
                    B[k][z] = availablePixel(src, srcWidth, srcHeight,
                            x + k - 1, y + z - 1);
                }
            }
            dst[i+j*dstWidth] = MatrixMutiple(A, B, C, i, j);
        }
    }
    //echo(dst, dstLen);

    AS3_SetS(dstByte, "position", AS3_Int(0));
    AS3_ByteArray_writeBytes(dstByte, dst, 4 * dstLen);
    return AS3_True();
}

int main() {
    AS3_Val biCubicMethod = AS3_Function(NULL, biCubic);
    AS3_Val lib = AS3_Object("biCubic:AS3ValType", biCubicMethod);
    AS3_Release(biCubicMethod);
    AS3_LibInit(lib);

    return 0;
}


as 浠g爜
package {
import cmodule.ImageScaling.CLibInit;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.geom.Rectangle;
import flash.utils.ByteArray;
import flash.utils.Timer;
[SWF(width="1000", height="600", backgroundColor="#000000", frameRate="24")]
public class Main extends Sprite {
[Embed(source='f_01.png')]
public static const image:Class;
public function Main() {
this.stage.scaleMode = StageScaleMode.NO_SCALE;
var bitmapdata:BitmapData = (new image() as Bitmap).bitmapData;
var t1:Number = (new Date()).time;
var bitmap:Bitmap = new Bitmap(Main.Cubic(bitmapdata, 256, 256));
var t2:Number = (new Date()).time;
trace((t2-t1)+"ms");
this.addChild(bitmap);
}
public static function Cubic (bitmapData:BitmapData, scalingWidth:uint, scalingHeight:uint):BitmapData {
var nbd:BitmapData = new BitmapData(scalingWidth, scalingHeight, true, 0xffffffff);
var loader:cmodule.ImageScaling.CLibInit = new cmodule.ImageScaling.CLibInit();
var lib:Object = loader.init();
var byte:ByteArray = bitmapData.getPixels(new Rectangle(0, 0, bitmapData.width, bitmapData.height));
var byte2:ByteArray = nbd.getPixels(new Rectangle(0, 0, scalingWidth, scalingHeight));
lib.biCubic(byte, bitmapData.width, bitmapData.height, byte2, scalingWidth, scalingHeight);
byte2.position = 0;
nbd.setPixels(new Rectangle(0, 0, scalingWidth, scalingHeight), byte2);
return nbd;
}
}
}




]]>as 鍥劇墖鐨勭緝鏀劇畻娉?(浜屾綰挎?鍜?涓夋鍗風Н) http://www.shnenglu.com/misschuer/archive/2012/08/07/186538.html姝ゆ渶鐩告?/dc:creator>姝ゆ渶鐩告?/author>Tue, 07 Aug 2012 01:58:00 GMThttp://www.shnenglu.com/misschuer/archive/2012/08/07/186538.htmlhttp://www.shnenglu.com/misschuer/comments/186538.htmlhttp://www.shnenglu.com/misschuer/archive/2012/08/07/186538.html#Feedback0http://www.shnenglu.com/misschuer/comments/commentRss/186538.htmlhttp://www.shnenglu.com/misschuer/services/trackbacks/186538.html
package {

import flash.display.BitmapData;
public class ImageScaling {
public static var PI:Number = Math.PI;
public static function getA(val:uint):uint {
return val >>> 24;
}
public static function getR(val:uint):uint {
return (val & 0x00ffffff) >>> 16;
}
public static function getG(val:uint):uint {
return (val & 0x0000ffff) >>> 8;
}
public static function getB(val:uint):uint {
return val & 0x000000ff;
}
public static function getAA(val:Array):Array {
var ret:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];
for (var i:uint = 0; i < 4; ++ i) {
for (var j:uint = 0; j < 4; ++ j) {
ret[ i ][ j ] = val[ i ][ j ] >>> 24;
}
}
return ret;
}
public static function getRR(val:Array):Array {
var ret:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];
for (var i:uint = 0; i < 4; ++ i) {
for (var j:uint = 0; j < 4; ++ j) {
ret[ i ][ j ] = (val[ i ][ j ] & 0x00ffffff) >>> 16;
}
}
return ret;
}
public static function getGG(val:Array):Array {
var ret:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];
for (var i:uint = 0; i < 4; ++ i) {
for (var j:uint = 0; j < 4; ++ j) {
ret[ i ][ j ] = (val[ i ][ j ] & 0x0000ffff) >>> 8;
}
}
return ret;
}
public static function getBB(val:Array):Array {
var ret:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];
for (var i:uint = 0; i < 4; ++ i) {
for (var j:uint = 0; j < 4; ++ j) {
ret[ i ][ j ] = (val[ i ][ j ] & 0x000000ff);
}
}
return ret;
}
public static function availablePixel (bitmapData:BitmapData, x:uint, y:uint):uint {
var flag:Boolean = true;
if (x < 0) { x = 0; flag = false; }
else if (x >= bitmapData.width) { x = bitmapData.width - 1; flag = false; }
else if (y < 0) { y = 0; flag = false; }
else if (y >= bitmapData.height) { y = bitmapData.height - 1; flag = false; }
var ret:uint = bitmapData.getPixel32(x, y);
if (!flag) ret = ret & 0x00ffffff;
return ret;
}
public static function SinXDivX(x:Number):Number {
var a:Number = -1;
if (x < 0) x = -x;
var x2:Number = x*x;
var x3:Number = x2*x;
if (x <= 1)
return (a + 2) * x3 - (a + 3) * x2 + 1;
else if (x <= 2) 
return a * x3 - 5 * a * x2 + 8 * a * x - 4 * a;
return 0;
}
public static function getPixels(a:Array, b:Array, c:Array):uint {
var arfa:Array = ImageScaling.getAA(b);
var R:Array = ImageScaling.getRR(b);
var G:Array = ImageScaling.getGG(b);
var B:Array = ImageScaling.getBB(b);
var aa:uint = ImageScaling.MatrixMutiple(a, arfa, c) << 24;
var rr:uint = ImageScaling.MatrixMutiple(a, R, c) << 16;
var gg:uint = ImageScaling.MatrixMutiple(a, G, c) << 8;
var bb:uint = ImageScaling.MatrixMutiple(a, B, c);
//trace (aa + " " + rr + " " + gg + " " + bb);
return aa + rr + gg + bb;
}
public static function border_color(Color:Number):uint {
if (Color <= 0) return uint(0);
if (Color >= 255) return uint(255);
return uint(Color);
}
public static function MatrixMutiple(a:Array, b:Array, c:Array):uint {
var ret:Number = 0;
for (var i:int = 0; i < 4; ++ i) {
var tmp:Number = 0;
for (var j:int = 0; j < 4; ++ j) {
tmp += a[ j ] * b[ j ][ i ];
}
ret += c[ i ] * tmp;
}
return border_color(ret + 0.5);
}
public static function thirdConvolution (bitmapData:BitmapData, scalingWidth:uint, scalingHeight:uint):BitmapData {
var widthFactor:Number = bitmapData.width / scalingWidth;
var heightFactor:Number = bitmapData.height / scalingHeight;
var i:uint = 0, j:uint = 0;
var nbd:BitmapData = new BitmapData(scalingWidth, scalingHeight, true, 0xffffffff);
for (i = 0; i < scalingWidth; ++ i) {
for (j = 0; j < scalingHeight; ++ j) {
var tx:Number = (i + 0.5) * widthFactor - 0.5;
var ty:Number = (j + 0.5) * heightFactor - 0.5;
if (tx < 0) tx = -tx;
if (ty < 0) ty = -ty;
var x:uint = Math.floor(tx);
var y:uint = Math.floor(ty);
var u:Number = tx - x;
var v:Number = ty - y;
var A:Array = [0.0, 0.0, 0.0, 0.0]; 
var B:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]; 
var C:Array = [0.0, 0.0, 0.0, 0.0];
for (var k:int = 0; k < 4; ++ k) {
A[ k ] = ImageScaling.SinXDivX(u+1.0-k);
C[ k ] = ImageScaling.SinXDivX(v+1.0-k);
for (var z:int = 0; z < 4; ++ z) {
B[ k ][ z ] = ImageScaling.availablePixel(bitmapData, x+k-1, y+z-1);
}
}
var p:uint = ImageScaling.getPixels(A, B, C);
nbd.setPixel32(i, j, p);
}
}
return nbd;
}
public static function calculator(p:Array, c:Array):uint {
return uint(p[0]*c[0]+p[1]*c[1]+p[2]*c[2]+p[3]*c[3]);
}
public static function mixedPixel(p:Array, c:Array):uint {
var aa:Array = [0, 0, 0, 0];
var ra:Array = [0, 0, 0, 0];
var ga:Array = [0, 0, 0, 0];
var ba:Array = [0, 0, 0, 0];
for (var i:uint = 0; i < 4; ++ i) {
aa[ i ] = ImageScaling.getA(p[ i ]);
ra[ i ] = ImageScaling.getR(p[ i ]);
ga[ i ] = ImageScaling.getG(p[ i ]);
ba[ i ] = ImageScaling.getB(p[ i ]);
}
return (ImageScaling.calculator(aa, c) << 24) + (ImageScaling.calculator(ra, c) << 16) + (ImageScaling.calculator(ga, c) << 8) + ImageScaling.calculator(ba, c);
}
public static function secondLinear (bitmapData:BitmapData, scalingWidth:uint, scalingHeight:uint):BitmapData {
var widthFactor:Number = bitmapData.width / scalingWidth;
var heightFactor:Number = bitmapData.height / scalingHeight;
var i:uint = 0, j:uint = 0;
var nbd:BitmapData = new BitmapData(scalingWidth, scalingHeight, true, 0xffffffff);
for (i = 0; i < scalingWidth; ++ i) {
for (j = 0; j < scalingHeight; ++ j) {
var tx:Number = i * widthFactor - 0.5;
var ty:Number = j * heightFactor - 0.5;
if (tx < 0) tx = -tx;
if (ty < 0) ty = -ty;
var x:uint = Math.floor(tx);
var y:uint = Math.floor(ty);
var u:Number = tx - x;
var v:Number = ty - y;
var ti:uint = x;
var tj:uint = y;

var p0:uint = ImageScaling.availablePixel(bitmapData, x, y);
var p1:uint = ImageScaling.availablePixel(bitmapData, x, y+1);
var p2:uint = ImageScaling.availablePixel(bitmapData, x+1, y);
var p3:uint = ImageScaling.availablePixel(bitmapData, x+1, y+1);
var pa:Array = [p0, p1, p2, p3];
var c0:Number = (1.0-u)*(1.0-v);
var c1:Number = (1.0-u)*v;
var c2:Number = u*(1.0-v);
var c3:Number = u*v;
var ca:Array = [c0, c1, c2, c3];
nbd.setPixel32(i, j, ImageScaling.mixedPixel(pa, ca));
}
}
return nbd;
}
}
}

嫻嬭瘯:
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.system.ImageDecodingPolicy;
import flash.utils.ByteArray;

[SWF(width="1000", height="600", backgroundColor="#cacaca", frameRate="24")]
public class Main extends Sprite {
[Embed(source='dog.png')]
public static const image:Class;
public function Main() {
var bitmapdata:BitmapData = (new image() as Bitmap).bitmapData
var bitmap:Bitmap = new Bitmap(showImage2(bitmapdata));
bitmap.x = 0;
bitmap.y = 0;
this.addChild(bitmap);
var bitmap2:Bitmap = new Bitmap(showImage1(bitmapdata));
bitmap2.x = 300;
bitmap2.y = 300;
this.addChild(bitmap2);
}
public static function showImage1(bitmapdata:BitmapData):BitmapData {
return ImageScaling.secondLinear(bitmapdata, 286, 300);
}
public static function showImage2(bitmapdata:BitmapData):BitmapData {
return ImageScaling.thirdConvolution(bitmapdata, 286, 300);
}
}
}



__________________________________________________
鍙傝?/span>h ttp://blog.csdn.net/housisong/article/details/1452249 



]]>
久久精品国产亚洲欧美| 久久天天日天天操综合伊人av | 久久久久一本毛久久久| 久久久久这里只有精品| 久久精品久久久久观看99水蜜桃| 无码AV波多野结衣久久| 2021国产成人精品久久| 精品国产日韩久久亚洲| 成人国内精品久久久久一区 | 亚洲精品美女久久777777| 九九久久自然熟的香蕉图片| 久久人人超碰精品CAOPOREN| 麻豆亚洲AV永久无码精品久久| 18岁日韩内射颜射午夜久久成人| 亚洲中文字幕无码久久精品1| 亚洲国产精品一区二区久久| 香蕉久久夜色精品国产2020| 久久99国产精品久久99| 久久夜色精品国产网站| 久久人人爽人人爽人人片AV麻豆 | 亚洲第一极品精品无码久久| 91久久精品无码一区二区毛片| 久久99久久99精品免视看动漫| 久久久久国色AV免费看图片| 国产精品禁18久久久夂久| 久久亚洲中文字幕精品一区| 国产精品亚洲综合专区片高清久久久| 亚洲中文久久精品无码| 亚洲国产成人精品女人久久久| 久久这里只有精品久久| 久久精品国产精品青草| 久久久久人妻一区精品色| 亚洲国产精品无码久久98| 亚洲国产综合久久天堂| 久久93精品国产91久久综合| 成人久久精品一区二区三区| 丁香色欲久久久久久综合网| 欧美精品国产综合久久| 无码国内精品久久综合88| 国产精品久久婷婷六月丁香| 久久精品国产色蜜蜜麻豆|