锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 澶у鏁板疄鏃剁綉緇滄父鎴忥紝灝?server 鐨勬椂闂村拰 client 鐨勬椂闂存牎瀵逛竴鑷存槸鍙互甯︽潵璁稿鍏朵粬緋葷粺璁捐涓婄殑渚垮埄鐨勩傝繖閲岃鐨勫鏃訛紝騫墮潪鍘昏皟鏁?client 鐨?os 涓殑鏃墮挓錛岃屾槸鎶?game client 鍐呴儴鐨勯昏緫鏃墮棿璋冩暣璺?server 涓鑷村嵆鍙?/p> 涓涓矖鐣ョ殑瀵規椂鏂規鍙互鏄繖鏍風殑錛宑lient 鍙戜竴涓暟鎹寘緇?server錛岄噷闈㈣褰曚笅鍙戦佹椂鍒匯俿erver 鏀跺埌鍚庯紝绔嬪埢緇欒繖涓暟鎹寘娣誨姞涓涓猻erver 褰撳墠鏃跺埢淇℃伅錛屽茍鍙戣繕緇?client 銆傚洜涓哄ぇ閮ㄥ垎鎯呭喌涓嬶紝game server 涓嶄細绔嬪埢澶勭悊榪欎釜鍖咃紝鎵浠ワ紝鍙互鍦ㄥ鐞嗘椂鍐嶅姞涓涓椂鍒匯備袱鑰呯浉鍑忥紝client 鍙互綆楀緱鍖呭湪 server 鍐呴儴鑰芥悂鏃墮棿銆?/p> client 鏀跺埌 server 鍙戣繕鐨勫鏃跺寘鏃訛紝鍥犱負浠栧彲浠ュ彇鍑哄綋鍒濆彂閫佹椂鑷繁闄勫姞鐨勬椂鍒諱俊鎭紝騫剁煡閬撳綋鍓嶆椂鍒伙紝涔熷氨鍙互綆楀嚭榪欎釜鏁版嵁鍖呮潵鍥炵殑琛岀▼鏃墮棿銆傝繖閲岋紝鎴戜滑鍋囧畾鏁版嵁鍖呮潵鍥炴椂闂寸浉鍚岋紝閭d箞鎶?server 閫氱煡鐨勬椂闂達紝鍔犱笂琛岀▼鏃墮棿鐨勪竴鍗婏紝鍒欏彲浠ュ皢 client 鏃墮棿鍜?server 鏃墮棿鏍″涓鑷淬?/p> 榪欎釜榪囩▼鐢?udp 鍗忚鍋氭瘮鐢?tcp 鍗忚鏉ョ殑濂姐傚洜涓?tcp 鍗忚鍙兘鍥犱負涓㈠寘閲嶅彂寮曡搗鏁欏ぇ璇樊錛岃?udp 鍒欐槸鑷繁鎺у埗錛岃繖涓宸灝忕殑澶氥傚彧鏄紝鐜板湪緗戠粶娓告垙鐢?tcp 鍗忚瀹炵幇瑕佹瘮 udp 鏈変紭鍔跨殑澶氾紝鎴戜滑涔熶笉蹇呬負瀵規椂鍙﹁搗涓濂楀崗璁蛋 udp 銆?/p> 涓鑸殑瑙e喅鏂規硶鐢ㄥ嬈℃牎瀵瑰氨鍙互浜嗐傚洜涓猴紝濡傛灉鍙屾柟鏃墮挓蹇參涓鑷寸殑鎯呭喌涓嬶紝瀵規椂鍖呭湪緗戠粶涓婅紼嬫椂闂磋秺鐭紝灝變竴瀹氳〃鏄庤宸秺灝忋傝繖涓宸槸涓嶄細瓚呰繃鍖呮潵鍥炴椂闂寸殑涓鍗婄殑銆傛垜浠竴鏃﹀湪瀵規椂榪囩▼涓緱鍒頒竴涓緢灝忕殑琛岀▼鏃墮棿錛屽茍鍦ㄦ垜浠父鎴忛昏緫鐨勬椂闂磋宸厑璁歌寖鍥村唴錛屽氨涓嶉渶瑕佸啀鏍″浜嗐?/p> 鎴栬呮牎瀵瑰嬈★紝鍙戠幇緗戠粶姣旇緝紼沖畾錛堣櫧鐒剁綉閫熷緢鎱級錛屼篃鍙互璁や負鏍″鍑嗙‘銆傝繖縐嶆儏鍐典笅錛屾綔鍦ㄧ殑鏃墮棿璇樊鍙兘姣旇緝澶с傚ソ鍦紝涓鑸紝鎴戜滑鍦ㄦ椂闂存晱鎰熺殑鍖呬笂閮戒細鎼哄甫鏃墮棿鎴熾傚綋鍙屾柟鏃墮棿鏍″璇樊寰堝皬鐨勬椂鍊欙紝client 鍙戣繃鏉ョ殑鏃墮棿鎴蟲槸涓嶅簲璇ユ棭浜?server 鐪熷疄鏃跺埢鐨勩傦紙褰撴椂闂存牎瀵瑰噯紜悗錛宻erver 鏀跺埌鐨勫寘涓婄殑鏃墮棿鎴沖姞涓婃暟鎹寘鍗曡鏃墮棿錛屽簲璇ョ瓑浜?server 褰撳墠鏃跺埢錛?/p> 涓鏃?server 鍙戠幇 client 鐨勫寘“鎻愬墠”鏀跺埌浜嗭紝鍙湁涓縐嶈В閲婏細褰撳垵鏍″鏃墮棿鏃剁碂緋曠殑緗戠粶鐘舵佸甫鏉ヤ簡寰堝鐨勬椂闂磋宸紝鑰岀幇鍦ㄧ殑緗戠粶鐘舵佽鏄庢樉浼樹簬閭d釜鏃跺欍傝繖鏃訛紝server 搴旇鍕掍護 client 閲嶆柊瀵規椂銆傚悓鐞嗭紝client 鍙戠幇 server 鐨勬暟鎹寘“鎻愬墠”鍒拌揪錛屼篃鍙互涓誨姩鍚?server 閲嶆柊瀵規椂銆?/p> 涓涓壇濂界殑瀵規椂鍗忚鐨勮瀹氾紝鍦ㄥ崗璁笂閬垮厤 client 鏃墮棿浣滃紛錛堟瘮濡傚姞閫熷櫒錛屾垨鑰呭噺閫熷櫒錛夋槸鍙鐨勩傝繖閲屼笉璁ㄨ涔熶笉鍒嗘瀽鏇撮珮綰х殑鍒╃敤娓告垙閫昏緫鍘繪椂闂翠綔寮婄殑鏂瑰紡錛屾垜浠粰鏁版嵁鍖呮墦涓婃椂闂存埑鐨勪富瑕佺洰鐨勪篃闈為槻姝㈡椂闂翠綔寮娿?/p> 鏍″鏃墮棿鐨勪竴鑸敤閫旀槸鐢ㄦ潵瀹炵幇鏇存祦鐣呯殑鎴樻枟緋葷粺鍜屼綅緗悓姝ャ傚洜涓轟笉渚濊禆緗戠粶浼犺緭鐨勭粺涓鏃墮棿鍙傜収鏍囧噯鍙互浣挎父鎴忕湅璧鋒潵鏇翠負瀹炴椂銆?/p> 棣栧厛璋堣皥浣嶇疆鍚屾銆?/p> 濂界殑浣嶇疆鍚屾涓瀹氳鑰冭檻緗戠粶寤惰繜鐨勫獎鍝嶏紝鎵浠ワ紝綆鍗曟妸 entity 鐨勫潗鏍囧箍鎾埌 clients 涓嶆槸涓涓ソ鐨勬柟妗堛傛垜浠簲璇ュ悓姝ョ殑鏄竴涓繍鍔ㄧ煝閲忎互鍙婃椂闂翠俊鎭傛棦錛屾棤璁烘槸 client 榪樻槸 server 錛屽彂鍑哄拰鏀跺埌鐨勪俊鎭兘搴旇鏄瘡涓?entity 鍦ㄦ煇涓椂鍒葷殑浣嶇疆鍜岃繍鍔ㄦ柟鍚戙傝繖鏍鳳紝鎺ユ敹鏂瑰彲浠ユ牴鎹敹鍒扮殑鏃跺埢錛屼及綆楀嚭 entity 鐨勭湡瀹炰綅緗傚浜?server 涓鏂圭殑澶勭悊錛屽彧瑕佽姹?client 鎸変竴涓鐜?涓鑸潵璇存垬鏂楁椂 10Hz 鍗沖彲錛岃岄潪鎴樻枟鐘舵佹垨 player 涓嶆敼鍙樿繍鍔ㄧ姸鎬佹椂鍙互鏇翠綆) 緇欏畠鍙戦佷綅緗俊鎭俿erver 鍙互鍦ㄧ綉緇滅姸鎬佷笉濂界殑鎯呭喌涓嬩緷鎹渶榪戞敹鍒扮殑鍖呬及綆楀嚭鐜板湪 player 浣嶇疆銆傝?client 鍙戝嚭鐨勬瘡嬈?player 浣嶇疆淇℃伅錛岄兘搴旇琚?server 淇′換錛岀敤鏉ュ幓淇涓婃鐨勪及綆楀箋傝?server 瑕佸仛鐨勫彧鏄娊鏌ワ紝鎴栦氦緇欏彟涓涓ā鍧楀幓鏍¢獙鏁版嵁鍖呯殑鍚堟硶鎬э紙闃叉浣滃紛錛夈?/p> 鍦?server 绔紝姣忎釜 entity 鐨勪綅緗寜 10Hz 鐨勯鐜囧仛紱繪暎榪愬姩鍗沖彲銆?/p> client 鍥犱負娑夊強鏄劇ず闂錛岀帺瀹跺笇鏈涚湅鍒扮殑鏄?entity 鐨勮繛緇繍鍔紝鎵浠ュ鐞嗚搗鏉ラ夯鐑︿竴鐐廣俿erver 鍙戣繃鏉ョ殑浣嶇疆鍚屾淇℃伅涔熷彲鑳藉洜涓虹綉緇滃歡榪熸櫄鏀跺埌銆俢lient 鍚屾牱鏍規嵁鏈榪戞敹鍒扮殑鍖呭仛浼扮畻錛屼絾鏄啀鏀跺埌鐨勫寘鍜屼箣鍓嶅凡緇忔敹鍒扮殑淇℃伅浼扮畻緇撴灉涓嶅悓鐨勬椂鍊欙紝搴旇鍋氱殑鏄繍鍔ㄦ柟鍚戝拰閫熷害鐨勪慨姝o紝灝藉彲鑳界殑璁╀笅嬈$殑浼扮畻鏇村噯紜?/p> 鍏充簬鎴樻枟鎸囦護鍚屾錛屾垜甯屾湜鏄粰鎵鏈夋垬鏂楁寚浠ら兘鍔犱笂鍐峰嵈鏃墮棿鍜屽紩瀵兼椂闂達紝榪欐鏄?wow 鐨勮璁°傝繖鏍鳳紝淇′換 client 鐨勬椂闂存埑錛屽氨鍙互寰楀埌 client 鍑嗙‘鐨勬寚浠や笅杈炬椂闂淬傚紩瀵兼椂闂達紙鎴栬呮槸鍏叡鍐峰嵈鏃墮棿錛夊彲浠ュ厖褰撶綉緇滃歡榪熸椂闂寸殑緙撳啿銆傚綋鐒舵垜浠幇鍦ㄧ殑璁捐浼氭洿澶嶆潅涓浜涳紝榪欓噷涓嶅啀鍒楀嚭銆傚浜庤窛紱繪晱鎰熺殑鎶鑳斤紝渚嬪榪滅▼鏀誨嚮鍜岃寖鍥撮瓟娉曪紝鎴戜滑鐨勮璁℃槸鏈変竴涓ā緋婄殑 miss 鍒ゅ畾鍏紡錛岃В鍐寵窛紱昏竟鐣岀殑鍒ゅ畾闂銆?/p> 榪欓噷錛?server 瀵規敾鍑葷洰鏍囩殑浣嶇疆鍋氫及綆楃殑鏃跺欙紝鍙互涓嶆寜涓婃鍙戝嚭鍖呯殑榪愬姩鏂瑰悜鍘誨仛浣嶇疆浼拌錛岃岄夋嫨鐢ㄦ渶鏈夊埄浜庤鏀誨嚮鑰呯殑榪愬姩鏂瑰悜鏉ュ仛銆傝繖鏍鳳紝鍙互鍑忓皯緗戠粶鐘跺喌宸殑鐜╁鐨勫姡鍔褲?/p> 瀵逛簬 PVE 鐨勬垬鏂楋紝鐢氳嚦鍙互鍋氭洿澶氱殑鍙栬垗錛岃揪鍒版父鎴忔祦鐣呯殑鏁堟灉銆傛瘮濡備竴涓綉緇滅姸鎬佸樊鐨勭帺瀹跺幓鎵?npc錛屼粬鏀誨嚮 npc 鐨勬椂鍒伙紝npc 鏄浜庢敾鍑昏寖鍥翠箣鍐呯殑銆備絾鏄敱浜庣綉緇滃歡榪燂紝鏁版嵁鍖呰 server 鏀跺埌鐨勬椂鍊欙紝npc 宸茬粡紱誨紑銆傝繖涓椂鍊?server 鍙互浠?client 鐨勯昏緫鏉ュ皢 npc 鎷変細鍘熸潵鐨勫潗鏍囥?/p> 铏界劧錛岃繖鏍峰仛錛屽彲鑳戒細寮曡搗鍏朵粬鐜╁錛堟梺瑙傝咃級 client 涓婅〃鐜扮殑涓嶅悓銆備絾鏄紝緗戠粶娓告垙寰堝鎯呭喌涓嬫槸涓嶉渶瑕佷弗鏍煎悓姝ョ殑銆傚湪涓嶅獎鍝嶄富瑕佹父鎴忛昏緫鐨勬儏鍐典笅錛宲layer 鐨勬墜鎰熸洿涓洪噸瑕併?/p> 鍦‵PU涓紝鍗村瓨鍦ㄧ潃涓夌榪愮畻綺懼害錛歴ingle precision(24bits)錛宒ouble precision(53bits)(涓鑸簲鐢ㄧ▼搴忓惎鍔ㄦ椂鐨勭簿搴?錛宒ouble extended precision(64bits錛屽緢灝戠敤)銆侳PU鐨勯粯璁ょ簿搴︽槸53bits鐨刣ouble precision銆侱3D鐨凜reateDevice鍑芥暟浼氬皢FPU鐨勮繍綆楃簿搴︽敼鎴?4bits銆傞櫎闈炴寚瀹氫簡D3DCREATE_FPU_PRESERVE鍙傛暟錛屽惁鍒欎笉鑳戒綘鐨勫簲鐢ㄧ▼搴忔誕鐐圭簿搴︿篃浼氶檷浣庛?br style="LINE-HEIGHT: 20px"> 鎮插墽鐨勬槸浣犱笉鑳界‘璁x鎴栬呭叾浠栫▼搴忔槸鍚︾粰浣犲垏鎹㈠洖鏉ワ紝鎰熻鏈変簺dx鐗堟湰鏈塨ug錛屽嵆浣胯緗瓺3DCREATE_FPU_PRESERVE涔熶笉浼氬垏鎹㈠洖鏉ャ傝繖鏄垜浠渶瑕佹墜鍔ㄥ垏鎹?br style="LINE-HEIGHT: 20px"> unsigned int uiFloat; ....... 緋誨垪鍓嶉潰鐨勪袱綃囨枃绔犲啓鐨勫唴瀹瑰お綆鍗曚簡錛屾湰鏂囧鎴戠悊瑙g殑GDI+鍋氫竴涓患榪幫紝涓嶅啀娑夊強浠g爜緇嗚妭銆?br> 鍏ㄥ眬鍙樻崲閫氳繃Graphics.Transform鎸囧畾錛屽叾綾誨瀷涓篗atrix銆侴DI+涓殑鐭╅樀涓?x3嫻偣鐭╅樀錛屽彲浠ラ氳繃Matrix綾葷殑鏂規硶鍜屽睘鎬ф潵淇敼鍏ㄥ眬鍙樻崲錛屼篃鍙互閫氳繃Graphics綾諱笂鐨凾ranslateTransform絳夋柟娉曟潵璁懼畾銆傞〉闈㈠彉鎹㈤氳繃Graphics綾葷殑PageUnit鍜孭ageScale鏉ヨ瀹氬潗鏍囧崟浣嶅拰緙╂斁鍊嶆暟銆?/font> Point, Size, Rectangle鏄疓DI+涓父鐢ㄧ殑搴﹂噺綾誨瀷錛屽茍涓旈兘鍏鋒湁瀵瑰簲鐨刦loat綾誨瀷銆侰olor鍒欎唬琛ㄤ簡32浣岮8R8G8B8鐨勯鑹層傝繖涓浜涢兘鏄熀鏈殑鍊肩被鍨嬶紝鍦ㄥ疄闄呬嬌鐢ㄧ殑鏃跺欙紝瑕佺墷璁板叾鍊肩被鍨嬬殑鐗瑰緛錛岀被浼紀.Size.Width = 100鐨勪唬鐮佹槸娌℃湁浣滅敤鐨勶紝鍥犱負.Width = 100鏄綔鐢ㄥ湪浜唎.Size榪斿洖鐨勪復鏃跺彉閲忎笂浜嗭紝瀵逛簬o鐨勭姸鎬佹病鏈変換浣曞獎鍝嶃?/font> GraphicsPath錛孯egion, Image鍒欐槸GDI+涓殑涓浜涜祫婧愭х殑綾誨瀷錛屽湪浣跨敤瀹屾垚鍚庤灝藉揩Dispose銆侴raphicsPath鏄竴緋誨垪榪炵畫鐨勭嚎錛屽寘鍚洿綰垮拰鏇茬嚎銆俁egion鍒欒〃紺哄皝闂殑涓涓尯鍩燂紝榪欎釜鍖哄煙鐨勮竟鐣屽彲浠ョ敱GraphicsPath鏉ユ弿榪般侷mage琛ㄧず涓涓浘褰紝鍏朵腑琛ㄧ幇鍍忕礌緇勬垚鐨勪綅鍥劇殑媧劇敓綾諱負Bitmap錛岃〃鐜板け閲忕粯鍥炬寚浠ょ粍鎴愮殑鍥懼艦鐨勬淳鐢熺被涓篗etafile銆傝綆楁満灞忓箷鏈鎿呴暱灞曠幇涓ょ淮鐨勬暟鎹紝鍥犳Rectangle瑙嗕負鏈綆鍗曠殑涓縐峈egion錛屽茍涓斿簲鐢ㄩ潰涔熼潪甯稿箍娉涳紝璁$畻鍖呭惈鏁翠釜Region鐨凴ectangle涔熸槸闈炲父甯歌鐨勪竴縐嶆搷浣溿?/font> Brush鐢ㄦ潵濉厖涓涓猂egion錛屽~鍏呮椂鍙互浣跨敤鍗曡壊濉厖錛屽彲浠ヤ嬌鐢ㄧ汗鐞嗭紙鍥劇墖錛夊~鍏咃紝涔熷彲浠ヤ嬌鐢ㄧ嚎鍨嬪~鍏呭拰娓愬彉濉厖錛?NET涓皝鍏呯殑GDI+鎻愪緵浜哠olidBrush錛孴extureBrush錛孒atchBrush錛孡inearGradientBrush鍜孭athGradientBrush綾匯侭rush涔熸槸闇瑕佸強鏃禗ispose鐨勶紝瀵逛簬SolidBrush錛屽彲浣跨敤SystemBrushes鍜孊rushes涓殑闈欐佸睘鎬э紝鑾峰彇棰勫畾涔夌殑Brush瀵硅〃錛屽厤鍘籇ispose鐨勯夯鐑︺?/font> Pen鏄敤鏉ョ敾綰跨殑錛孏DI+鐨勭嚎鏄湁瀹藉害鐨勶紝涔熷氨鏈夊叾鍐呴儴鍖哄煙錛屽洜姝DI+涓殑Pen闇瑕佷竴涓狟rush瀹炰緥鏉ユ瀯閫犮傚悓鏍稴ystemPens鍜孭ens涓彁渚涗簡棰勫畾涔夌殑鍗曡壊Pen瀹炰緥銆?/font> 姝ゅFont瀵硅薄鐢ㄦ潵瀹炵幇GDI+涓笉鍚屽瓧浣撶殑杈撳嚭錛孏raphics綾繪彁渚涗簡涓涓狹easureString鏂規硶璁$畻涓孌靛瓧絎︿覆緇樺埗鍑烘潵鏃跺崰鎹殑鍖哄煙澶у皬銆?/font> Graphics綾繪彁渚涗簡涓緋誨垪Draw...鏂規硶錛屼嬌鐢ㄧ壒瀹氱殑Pen鏉ョ粯鍒朵竴瀹氱殑褰㈢姸錛孎ill...緋誨垪鍒欎嬌鐢ㄧ壒瀹氱殑Brush鏉ュ~鍏呮寚瀹氬尯鍩熴?/font> Graphics鐨凜lip灞炴ч氳繃涓涓猂egion綾葷殑瀹炰緥鎸囧畾GDI+鏈夋晥緇樺埗鍖哄煙錛岃繖鏄竴涓熀紜淇℃伅錛孏raphics鐨勫睘鎬lipBounds錛孖sClipEmpty錛孖sVisibleClipEmpty錛孷isibleClipBounds鍧囧熀浜嶤lip灞炴э紝騫朵笖涓哄彧璇葷殑銆?/font> CompositingQuality錛孖nterpolationMode錛孭ixelOffsetMode錛孲moothingMode錛孴extRenderingHint鐢ㄦ潵鎺у埗緇樺埗杈撳嚭璐ㄩ噺錛岃川閲忚秺楂橈紝閫熷害瓚婃參銆侰ompositingMode鐢ㄦ潵鍚敤Alpha Blend錛孴extContrast鎺у埗鏂囨湰杈撳嚭鏃剁殑Gamma鍊鹼紝RenderingOrigin鐢ㄦ潵鎺у埗8bit/16bit鑹叉繁鏃剁殑鑹插僵鎷屽姩鍜孒atch Brush鐨勮搗濮嬬偣銆?br> 1. BMP鏂囦歡緇勬垚 銆銆璁$畻鏈哄僵鑹叉樉紺哄櫒鏄劇ず鑹插僵鐨勫師鐞嗕笌褰╄壊鐢佃鏈轟竴鏍鳳紝閮芥槸閲囩敤R錛?span>Red錛夈?span>G錛?span>Green錛夈?span>B錛?span>Blue錛夌浉鍔犳販鑹茬殑鍘熺悊錛氶氳繃鍙戝皠鍑轟笁縐嶄笉鍚屽己搴︾殑鐢靛瓙鏉燂紝浣垮睆騫曞唴渚ц鐩栫殑綰€佺豢銆佽摑紓峰厜鏉愭枡鍙戝厜鑰屼駭鐢熻壊褰┿傝繖縐嶈壊褰╃殑琛ㄧず鏂規硶縐頒負RGB鑹插僵絀洪棿琛ㄧず錛堝畠涔熸槸澶氬獟浣撹綆楁満鎶鏈腑鐢ㄥ緱鏈澶氱殑涓縐嶈壊褰╃┖闂磋〃紺烘柟娉曪級銆?/span> 璋冪敤妯″瀷 鍒╃敤闈㈠悜瀵硅薄鎬濇兂澶氭佹?璋冪敤鏂逛繚瀛樼潃琚皟鐢ㄦ柟鐨勫熀紜鎺ュ彛鎸囬拡(涓鑸О鍛間負 閽╁瓙),璋冪敤鏂圭洿鎺ヨ皟鐢ㄦ帴鍙f寚閽堥噷闈㈡柟娉?鏂規硶鍏蜂綋瀹炵幇閫昏緫鐢?/p>
璇ユ帴鍙g殑媧劇敓綾誨疄鐜?紺烘剰鍥? 涓虹郴緇熷姛鑳借璁★紝闇瑕佸鐞嗙綉緇滀簨浠舵暟鎹甋ocketEvent錛屾暟鎹簱浜嬩歡鏁版嵁DatabaseEvent錛屽畾鏃跺櫒浜嬩歡鏁版嵁TimerEvent絳夛紝涓烘寤虹珛鏁版嵁闃熷垪鏈?/p>
鍔ueueService,涓烘瘡涓闃熷垪寤虹珛澶氫釜瀛愮嚎紼婹ueueServiceThread澶勭悊銆傛暟鎹槦鍒楁湇鍔℃彁渚涙坊鍔犱簨浠舵暟鎹柟娉旳ddToQueue錛岃緗暟鎹槦鍒楁湇鍔¢挬 瀛怱etQueueServiceSink錛岃鏁版嵁闃熷垪鏈嶅姟閽╁瓙QueueServiceSink鍋氬叿浣撻昏緫浜嬩歡鏁版嵁澶勭悊銆?br>紺烘剰鍥? 鐞嗘帴鍙o紝澶栭儴澶勭悊鎺ュ彛鍏蜂綋鐢變簩嬈″紑鍙戠敤鎴峰疄鐜般傜ず鎰忓浘: 浜嬩歡鏁版嵁璁捐 鍔熻兘妯″潡鍒掑垎 鏁版嵁闃熷垪鏈嶅姟QueueService妯″潡璁捐 鍩烘湰璁捐姒傚康 寤虹珛涓涓唴瀛橀摼琛紝淇濆瓨浜嬩歡鏁版嵁錛屽澶栭儴鎻愪緵鏂規硶寰閾捐〃娣誨姞浜嬩歡鏁版嵁騫墮氱煡綰跨▼錛屽悓鏃跺惎鍔ㄥ涓鐞嗙嚎紼嬶紝浠庢暟鎹摼琛ㄩ噷鑾峰彇浜嬩歡鏁版嵁錛屾墽琛屽閮ㄩ挬瀛愭柟娉曡繘琛屽鐞?綰跨▼浜嬩歡閫氱煡閲囩敤瀹屾垚绔彛鎶鏈? 綾諱笌鎺ュ彛璁捐 鎺ュ彛璁捐 鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/dotnet90/archive/2009/05/05/4152401.aspx
]]>
涓姝ヤ竴姝ョ殑璋冭瘯錛屽彂鐜扮粡甯稿嚭鐜版寚閽堝紓甯哥殑鍙橀噺鎬繪槸鍦ㄨ皟鐢╝utorelease鍚庝竴浼氬氨鑾悕鍏跺鍐嶄嬌鐢ㄧ殑鏃跺欏氨鎶涘紓甯搞傜嫚涓嬪績錛屽湪瀹冪殑鏋愭瀯鍑芥暟閲岄潰鏂偣+Log杈撳嚭淇℃伅銆傚彂鐜板璞¤閲婃斁浜嗐備竴鏃朵篃寰堣糠緋婏紝鍥犱負瀵硅薄鍙槸
autorelease,騫舵病鏈夌湡姝i噴鏀撅紝鏄皝瀵艱嚧瀹冮噴鏀劇殑錛?br style="word-wrap: break-word; " />
鐒跺悗灝卞幓鐪嬩簡CCAutoreleasePool鐨勬簮鐮侊紝鍙戠幇瀛樺湪Cocos2d-X鐨勫唴瀛樼鐞嗗湪澶氱嚎紼嬬殑鎯呭喌涓嬪瓨鍦ㄥ涓嬮棶棰?br style="word-wrap: break-word; " />
濡傚浘錛歵hread 1鍜宼hread 2鏄嫭绔嬬殑涓や釜綰跨▼錛屽畠浠箣闂村瓨鍦–PU鍒嗛厤鐨勪氦鍙夐泦錛屾垜浠湪time 1鐨勬椂鍊檖ush涓涓猘utorelease鐨勮嚜鍔ㄩ噴鏀炬睜錛屽湪璇ョ嚎紼嬬殑鏈熬錛屽嵆time 3鐨勬椂鍊檖op瀹冦傚悓鐞嗗湪thread 2鐨勭嚎紼嬮噷闈紝鍦╰ime 2鐨勬椂鍊檖ush涓涓嚜鍔ㄩ噴鏀炬睜錛屽湪time 4鐨勬椂鍊欓噴鏀懼畠錛屽嵆Pop.
姝ゆ椂鎴戜滑鍋囪鍦╰hread 2鍒嗛厤寰楀埌CPU鐨勬椂鍊欐湁涓涓璞bj鑷姩閲婃斁錛屽嵆obj-autorelease().閭d箞鍦╰ime 3鐨勬椂鍊欎細鍙戠敓鏄箞浜嬫儏鍛紵
絳旀寰堢畝鍗曪紝灝辨槸obj鍦╰ime 3鐨勬椂鍊欏氨琚噴鏀句簡錛岃屾垜浠湡鏈涘畠鍦╰ime 4鐨勬椂鍊欐墠閲婃斁銆傛墍浠ュ氨瀵艱嚧鎴戜笂闈㈣鐨勶紝鍦ㄥ綰跨▼涓嬮潰錛宑ocos2d-x鐨刟utorelease鍙橀噺浼氬彂鐢熻帿鍚嶅叾濡欑殑鎸囬拡寮傚父銆?/strong>
瑙e喅鍔炴硶錛?/strong>鍦≒oolManager緇欐瘡涓嚎紼嬫牴鎹畃thread_t鐨勭嚎紼媔d鐢熸垚涓涓狢CArray鐨剆tack鐨勫祵濂楃鐞嗚嚜鍔ㄩ噴鏀炬睜銆傛簮鐮佸涓?br style="word-wrap: break-word; " />鎵浠ユ垜鍦≒ush鐨勬椂鍊欐牴鎹綋鍓嶇嚎紼嬬殑pthread_t鐨勭嚎紼媔d鐢熸垚涓涓狢CArray鐨剆tack鏉ュ瓨鍌ㄨ綰跨▼瀵瑰簲鐨凙utoreleasepool鐨勫祵濂楀璞?br style="word-wrap: break-word; " />婧愮爜濡備笅
杞嚜錛?a >http://www.ityran.com/thread-3364-1-1.html
]]>
璁稿浜哄紑濮嬭窇姝ュ氨鏄洜涓哄噺鑲ワ紝璺戞紜疄鍑忚偉鐨勬渶濂借繍鍔ㄦ柟寮忥紝璺戞姣忓垎閽熸瘮璧峰叾浠栬繍鍔ㄧ噧鐑ф洿澶氱殑鍗¤礬閲屻?nbsp;
2.闃叉浣犵殑楠ㄩ錛岃倢鑲夐鍖栥?nbsp;
鎴戜滑鐨勯楠兼槸鍜屼綘鐨勮韓浣撻渶姹傜浉浜掑崗璋冪殑銆傞暱鏈熷潗鍦ㄦ樉紺哄櫒鍓嶇殑鎴戜滑璁╂垜浠殑楠ㄩ瓚婃潵瓚婅剢寮便傝岄暱鏈熺殑錛岀粡甯哥殑榪愬姩浼氫嬌浣犵殑楠ㄩ淇濇寔鍋ュ悍銆傛洿榪涗竴姝ヨ灝辨槸闃叉鎴戜滑韜綋鍐呴儴鑰佸寲鐨勬洿蹇傜粡甯哥殑楂樺己搴﹂敾鐐鹼紝渚嬪璺戞錛岃璇佹槑鍙互淇冭繘浜轟綋鑽峰皵钂欑殑鐢熼暱錛岃嵎灝旇挋灝辨槸閭d簺鍚嶄漢涓轟簡鐪嬭搗鏉ユ洿騫磋交鑰屾寔緇敞灝勭殑鑽墏銆?nbsp;
3.鎶墊姉鐤劇梾
璺戞鍙互闄嶄綆寰椾腑椋庡拰涔寵吅鐧岀殑椋庨櫓銆傜粡甯哥殑璺戞宸茬粡鎴愪負鍖葷敓瀵歸偅浜涘鏄撳紩鍙戞垨鍦ㄥ凡緇忓鍦ㄦ棭鏈熺殑楠ㄨ川鐤忔澗錛岀硸灝跨梾錛岄珮琛鍘嬬梾浜虹殑娌葷枟寤鴻銆?nbsp;
4.緇存寔騫舵彁楂樻諱綋鐨勮韓浣撴按騫熾?nbsp;
璺戞鏄槸浜轟滑鍙互閲囧彇鐨勬渶濂界殑閿葷偧韜綋鐨勮繍鍔ㄣ傚畠鍙互鎻愰珮鑳嗗浐閱?闄嶄綆琛娑插嚌鍧楃殑鍗遍櫓錛岄敾鐐間綘鐨?0%鐨勭粡甯稿浜庨棽緗姸鎬佺殑鑲恒傝窇姝ヨ繕鍙互閫氳繃澧炲姞浣犵殑娣嬪反緇嗚優鏉ュ寮轟綘鐨勫厤鐤姏銆?nbsp;
5.璁╀綘鏇村姞鑷俊銆?nbsp;
鎱㈣窇鍍忓叾浠栦竴浜涘崟浜鴻繍鍔ㄤ竴鏍鳳紝瀹冨彲浠ュ寮轟綘鐨勮嚜淇″績銆傝窇姝ヨ浣犲畬鎴愪竴嬈″張涓嬈$殑灝濊瘯錛岃浣犲彉寰楁洿寮哄ぇ錛屾洿鍔犺偗瀹氳嚜宸便備粬璁╀綘鐪熷疄鐨勮秺榪囨煇涓北宄幫紝絀胯繃鏌愪釜闅滅.鍦ㄦ剰璇嗗埌浣犵殑韜綋宸茬粡鏇村姞寮哄.錛屾洿鍔犳湁鐢紝浣犱細寰楀埌琚祴浜堝姏閲忓拰鑷敱鐨勬劅瑙夈傝嚜淇℃洿鏄偅浜涢氳繃璺戞鎴愬姛鐨勫噺鑲ュ茍寰楀埌鑷繁蹇冧腑鐞嗘兂韜潗鐨勮窇姝ヨ呯殑瀹濊吹璐㈠瘜銆?nbsp;
6.鏀炬澗鑷繁錛屽噺杞誨帇鍔涖?nbsp;
鎱㈣窇鍙互杞Щ鑱傛敞鎰忓姏錛屾矏嫻村湪璺梺鐨勯鏅腑錛屼綘鐨勭儲鎭間竴瀹氫細娑堝け孌嗗敖銆?nbsp;
闀胯窇閫傚悎閭d簺姝e鍦ㄤ竴鍫嗗ご鐤鹼紝鎭間漢鐨勭儲蹇冧簨鐨勪漢銆傝繕鏈夋瘮鍦ㄤ袱涓皬鏃剁殑闀胯窇涓紝娓呯悊鐨勭殑澶磋剳銆佽垝緙撹嚜宸辯殑紲炵粡鏇村ソ鐨勪富鎰忎簡鍚椼?nbsp;
濡傛灉浣犳鏃惰寰楀紓甯稿帇鎶戯紝浣曚笉蹇窇涓涓嬪憿錛屼箣鍚庝綘浼氫竴涓ソ鐨勫績鎯呫?nbsp;
7.钁楀悕鐨?#8220;璺戞鑰呴珮宄頒綋楠?#8221;
鍖呮嫭閲婃斁鍘嬪姏錛屾參璺戣璇佹槑鎻愰珮浣犵殑蹇冩併傝窇姝ワ紝鐗瑰埆鍦ㄦ埛澶栧拰鏃呰涓?浼氫嬌韜綋閲婃斁涓縐嶇墿璐ㄨ浣犱駭鐢熶竴縐嶅垢紱忔剦鎮︽劅錛堣窇姝ヨ呴珮宄頒綋楠岋級鎴栬呭氨鏄揩涔愮殑鎰熻銆傝窇姝ュ凡緇忚閲囩敤浜嗗騫存潵娌葷枟涓村簥鎶戦儊鐥囷紝涓婄樉絳夈傛洿灝戠殑鍘嬪姏錛屾洿灝戠殑鍘嬫姂錛屾洿灝戠殑鐤插姵錛屾洿灝戠殑娣蜂貢錛岀粡榪囦竴孌墊椂闂寸殑緇忓父璺戞錛岀梾浜哄緢蹇氨鏈変簡鍙樺寲銆傝窇姝ヨ浠栦滑鏈変簡娉ㄦ剰鐨勫璞★紝璁╀粬浠湅鍒頒簡闄や簡浠栦滑娑堟瀬鐨勭姸鎬佸拰娌夋漢鐨勪簨鍔★紝榪樻湁涓浜涚編濂界殑涓滆タ鐨勫瓨鍦ㄣ?nbsp;
8.閿葷偧浣犵殑澶磋剳銆?nbsp;
鍍忓浣犵殑韜綋鏈夋墍甯姪涓鏍鳳紝璺戞鍚屾牱瀵逛綘鐨勫ご鑴戝緢鏈夊府鍔┿傞氳繃鍦ㄨ窇姝ヤ腑鍏嬫湇涓緋誨垪鐨勯殰紕嶏紝浣犲浼氫簡涓撴敞鍜屽喅蹇?鍦ㄧ粡鍘嗛偅浜涗綘鍑犱箮瑕佹斁寮冪殑闀胯窇鎴栧叾浠栭」鐩悗浣犱細鍙戠幇錛氫綘鍦ㄨ窇姝ヨ繃紼嬩腑浜х敓鐨勬剰蹇楀拰浣撻瓌鐨勫寮鴻浣犲湪鍏朵粬鏂歸潰鏈夌潃鍚屾牱鐨勪笓娉ㄥ拰鍐沖績銆?nbsp;
9.澧炲己鍚堜綔綺劇銆?nbsp;
鍙堟槸涓涓潪甯稿煎緱鍘誨仛鐨勫ソ澶勩傝繖鐐瑰ソ澶勬垨璁歌寰堝浜烘劅鍒版儕濂囷紝鍥犱負浜轟滑璁や負璺戞涓嶅彲鑳藉緱鍒拌繖縐嶇泭澶勶紝浠呬粎鐢變簬璺戞鏄崟浜鴻繍鍔ㄣ備絾鏄窇姝ョ‘瀹炴湁鏃舵秹鍙婂埌浜掔浉鍚堜綔銆傛梾琛岃窇姝ワ紝鐗瑰埆鏄湪閭d簺璺喌涓嶅ソ鐨勫湴鏂癸紝闇瑕佹瀬澶х殑鍚堜綔鎰忚瘑銆傝繖浜涜礬闈㈢粡甯鎬細鏈変竴浜?闅滅濡傜煶澶淬佺亴鏈ㄨ璺戞榪涜鐨勫緢鍥伴毦銆?nbsp;
10.闅忔椂闅忓湴錛岀畝鍗曘?nbsp;
涓嶆槸寰堝鐨勮繍鍔ㄥ彲浠ュ湪浠諱綍鍦版柟錛屽嚑涔庝笉闇瑕佽澶囩殑銆傛垜鏁㈣偗瀹氬彜浠e笇鑵婁漢浼氫簤杈╄鐢氳嚦鏄瀷瀛愬拰琛f湇涔熶笉闇瑕併備粖澶╋紝鎴戜滑鍙槸闇瑕佷竴鍙屽ソ鐐圭殑璺戞闉嬬劧鍚庡氨鍙互鍑哄彂浜嗐備粠甯備腑蹇冨埌閮婂尯,鏁翠釜涓栫晫鐨勫湴鏂圭瓑寰呬綘鐨勬帰绱€傜粡甯稿嚭宸悧錛熶綘鐨勬梾琛岀閲岃偗瀹氫細鏈夌┖闂存潵瑁呬綘鐨勮繍鍔ㄩ瀷鐨勩傝繖涓笘鐣屽氨鏄綘鐨勫仴韜埧錛屽幓鍐嶆鍙戠幇瀹冨惂銆?nbsp;
Here are some tips for how to make running a practice:
Be consistent in your running program. Plan your weekly workout schedule and stick to it. This will teach you persistence.
Know which focuses you'll use during every run. This will teach you planning and mindfulness, and improve your mind/body connection.
Constantly practice relaxing your muscles. This will help to relieve tension and train you to relax no matter what activity you're doing.
At the end of your run, spend a few minutes doing an "end-of-run review." Ask yourself how well you did with keeping your focuses, how your body felt during the run. What did you come away with that will help your next run? Then, the next time you go out for a run, you'll have something to work on that you brought forward from your last run. In this way you'll build a healthy, growing and sustainable running program.
杞嚜錛?a >http://www.douban.com/group/topic/20749798/
]]>
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&g_pd3dDevice)))
{
return FALSE;
}
榪欐槸 CreateDevice 鍑芥暟淇敼浜嗙郴緇熺殑嫻偣榪愮畻綺懼害錛屽彧瑕佸姞涓?D3DCREATE_FPU_PRESERVE 閫夐」鍗沖彲瑙e喅錛屼慨鏀瑰悗鐨勪唬鐮佸涓嬶細
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE,
&d3dpp,
&g_pd3dDevice)))
{
return FALSE;
}
鍙傝冭祫鏂欙細
http://topameng.spaces.live.com/Blog/cns!F962D4854A8233D!396.entry?wa=wsignin1.0&sa=56810441
D3DCREATE_FPU_PRESERVE
_controlfp_s(&uiFloat, 0, 0);
_controlfp_s(0, _PC_53, MCW_PC); //鍒囨崲鍒癲ouble綺懼害
_controlfp_s(0, uiFloat, MCW_PC); //鍒囨崲鍒板師鏉ョ殑綺懼害
]]>
GDI+涓叡鏈変笁縐嶅潗鏍囷紝鍏ㄥ眬鍧愭爣銆侀〉闈㈠潗鏍囧拰璁懼鍧愭爣銆傚湪GDI+鐨勭粯鍥捐皟鐢ㄤ腑錛屼紶鍏ョ殑鍧愭爣浣嶄簬鍏ㄥ眬鍧愭爣鍐咃紝鍏ㄥ眬鍧愭爣緇忕敱鍏ㄥ眬鍙樻崲杞崲鍒伴〉闈㈠潗鏍囷紝欏甸潰鍧愭爣鍐嶉氳繃欏甸潰鍙樻崲璁$畻鍑鴻澶囧潗鏍囥?/font>
榪欎簺鍐呭瀵逛箣鍚庣殑Minesweeper鍐呭瓚沖浜嗭紝濡傛灉鏈夐棶棰橈紝嬈㈣繋鍦ㄨ瘎璁轟腑鎻愬嚭銆?/font>
]]>
鍥涘ぇ鍥懼儚搴撶殑浣跨敤鎰熷彈:OpenCV/FreeImage/CImg/CxImage
瀵筄penCV鐨勫嵃璞★細鍔熻兘鍗佸垎鐨勫己澶э紝鑰屼笖鏀寔鐩墠鍏堣繘鐨勫浘鍍忓鐞嗘妧鏈紝浣撶郴鍗佸垎瀹屽杽錛屾搷浣滄墜鍐屽緢璇︾粏錛屾墜鍐岄鍏堢粰澶у琛ヨ綆楁満瑙嗚鐨勭煡璇嗭紝鍑犱箮娑電洊浜嗚繎10騫村唴鐨勪富嫻佺畻娉曪紱鐒跺悗灝嗗浘鍍忔牸寮忓拰鐭╅樀榪愮畻錛岀劧鍚庡皢鍚勪釜綆楁硶鐨勫疄鐜板嚱鏁般傛垜鐢ㄥ畠鏉ュ仛浜嗕竴涓狧arris瑙掔偣媯嫻嬪櫒鍜孋anny杈圭紭媯嫻嬪櫒錛屾誨叡灝辮姳浜嗕竴涓皬鏃訛紙絎竴嬈$敤OpenCV錛夈傝屼笖璇ュ簱鏄劇ず鍥懼儚鏋佸叾鏂逛究錛屼袱鍙ヨ瘽灝卞彲浠ャ備絾璇ュ簱浼間箮涓嶅ぇ紼沖畾錛屽32F鍜?6S銆?U鐨勫浘鍍忔暟鎹敮鎸佷笂bug閲嶉噸銆傛垜鐢╟vFilter2D鍑芥暟榪涜綰挎ф護娉紝灞″薄鍑洪敊錛屽悗鏉ヤ竴鏌ュ師鏉ユ槸澶ug銆傚悗鏉ョ敤cvmGet鏉ュ彇鐭╅樀鍏冪礌涔熸槸棰戠箒鍑洪敊錛屼粩緇嗘鏌ヤ簡N閬嶇‘淇濈▼搴忔病闂涔嬪悗鍦▂ahoogroup涓婃壘鍒扮瓟妗堬細浠嶇劧鏄痓ug銆傘傘備絾濂芥璇ュ簱鏄紑鏀劇殑錛屾墍浠ヨ嚜宸卞彲浠ヤ慨鏀癸紱鑰屼笖鏀寔CVS銆傚彟澶栬搴撶敤鐨勬槸IPL鐭╅樀搴擄紝閫熷害濂囧揩锝烇綖
瀵笴xImage鑰冨療鐨勫嵃璞★細璇ュ紑鍙戝寘瀹屽叏寮鏀炬簮浠g爜錛屽浘鍍忓皝瑁呬負涓涓被錛屽姛鑳芥瀬涓哄己澶э紝涓嶹indows銆丮FC鏀寔鏋佸ソ錛屾敮鎸佸浘鍍忕殑澶氱鎿嶄綔錛堢嚎鎬ф護娉€佷腑鍊兼護娉€佺洿鏂瑰浘鎿嶄綔銆佹棆杞緝鏀俱佸尯鍩熼夊彇銆侀槇鍊煎鐞嗐佽啫鑳鑵愯殌銆乤lpha娣峰悎絳夌瓑錛夛紝鏀寔浠庢枃浠躲佸唴瀛樻垨鑰厀in32api瀹氫箟鐨勪綅鍥懼浘鍍忔牸寮忎腑璇誨彇鍥懼儚錛屾敮鎸佸皢鍥懼儚鏄劇ず鍦ㄤ換鎰忕獥鍙o紝鍔熻兘鍙皳寰堝己澶т簡錛岃屼笖瀵瑰儚绱犵殑鎿嶄綔寰堟柟渚匡紝鍙﹀榪樻湁涓涓晫闈㈠緢寮虹殑demo錛屽彲浠ョ洿鎺ュ湪涓婇潰榪涜浜屾寮鍙戯紝鎺ㄨ崘浣跨敤錛?br>緙虹偣錛氶噷闈㈢殑瀛愬簱寰堝錛岀敤璧鋒潵鍙兘杈冮夯鐑︼紱鑰屼笖鎰熻閫熷害紼嶆參錛屼笉濡傚悗闈㈡彁鍒扮殑freeimage
浣嗗姛鑳界湡鐨勫崄鍒嗗己澶у晩錛?br>
CImg錛氬氨涓涓?h鏂囦歡鎵浠ョ敤璧鋒潵寰堢畝鏄庯紝浣嗘劅瑙夊姛鑳戒笂涓嶅CxImage銆傚彲浠ヤ笌CxImage閰嶅悎浣跨敤錛屽洜涓篊Img鎻愪緵浜嗗熀浜巐apack鐨勭煩闃佃繍綆楀嚱鏁板拰瀹屽杽鐨勭嚎鎬ф護娉㈠嵎縐嚱鏁幫紝鍚屾椂CImg鍋氬儚绱犺繍綆楄繕鏄緢鏂逛究鐨勩傚彟澶栵紝鐙湁Display綾誨彲浠ユ柟渚跨殑瀹炵幇鍚勭鏄劇ず錛屽寘鎷樉紺哄浘鍍忋佹墦瀛椼佺敾綰跨瓑絳夈傝繕鏈夛紝璇ュ簱鏈変釜鍩轟簬鍏夋祦鐨勫灝哄害鍥懼儚閰嶅噯渚嬪瓙錛屽緢濂?br>
FreeImage錛欳璇█鐨勪綋緋伙紝澶ч噺浣跨敤鎸囬拡榪愮畻閫熷害鍙互淇濊瘉錛屽唴鍚厛榪涚殑澶氱鎻掑肩畻娉曘傚彟澶栫嫭鏈夌殑鏀寔meta exif淇℃伅鐨勮鍙栥傝搴撴渶澶х殑鐗圭偣灝辨槸姣旇緝綆緇冿紝鍙妸閲嶇偣鏀懼湪瀵瑰悇縐嶆牸寮忓浘鍍忕殑璇誨彇鍐欏叆鏀寔涓婏紝娌℃湁鏄劇ず閮ㄥ垎錛屽疄闄呯紪紼嬬殑鏃跺欒繕鏄渶瑕佽皟鐢ˋPI鍑芥暟榪涜鏄劇ず
OpenCV 鍙傝冩墜鍐?/div>
娣卞害鍥懼儚鐞嗚В
http://blog.csdn.net/thirdapple/category/117113.aspx
涓涓竟緙樿瘑鍒畻娉曚唬鐮?br>http://www.moon-soft.com/download/soft/2157.htm
緗戝弸璇勮
鏈珯緗戝弸
鏃墮棿錛?008-03-15 23:58:05 IP鍦板潃錛?19.225.53.鈽?/td>
CImg 鏄竴涓敤C++緙栧啓鐨勫紑婧愭暟瀛楀浘鍍忓鐞嗗簱銆?br>
浣滆呬粙緇?br>
浣滆匘avid Tschumperlé錛?nbsp;涔嬪墠鏄硶鍥絃a Rochelle澶у鐨勪竴鍚嶆暀鎺堬紝鐜板彈闆囦簬CNRS 鍥懼儚緇勩傛嵁璇翠綔鑰呬粠1998騫村啓鍗氬+璁烘枃鏃跺氨寮濮嬪啓榪欎釜搴撱備綔鑰呬富欏碉細http://www.greyc.ensicaen.fr/~dtschump/ 錛岄噷闈㈡湁鏇村鍏充簬浣滆呮湰浜虹殑娑堟伅銆?br>
搴撶殑鐗圭偣
榪欎釜搴撲笌涓鑸殑綾誨簱鏈澶х殑涓嶅悓鐐瑰湪浜庯紝涓嶅儚鍏朵粬鐨勫浘鍍忓鐞嗙被搴擄紝CImg鎵鏈夌殑浠g爜閮藉寘鍚湪涓涓枃浠朵腑錛圕Img.h錛夈傚簱鐨勮璁′嬌鐢ㄤ簡C++妯℃澘鎶鏈紝鏀寔澶氱鏁版嵁綾誨瀷錛屼笖搴撶殑璁捐鏈哄櫒綆鍗曟槑浜嗐傚簱鍖呭惈浜嗚繖鍑犱釜妯″潡錛氶鍏堟槸CImg綾伙紝榪欐槸搴撶殑涓諱綋錛屽熀鏈笂鍩轟簬鍥懼儚鐨勬搷浣滈兘鍦ㄨ繖涓被閲屽疄鐜頒簡銆傜浜屼釜鏄疌ImgDisplay綾伙紝璇ョ被鐢ㄤ簬鏄劇ず澶勭悊鍚庣殑鍥懼儚銆傛垜浠湪鐢╟++澶勭悊鍥懼儚鏃訛紝鎬繪槸瑕佽姳濂藉鍔熷か鍦ㄥ浘鍍忕殑鏄劇ず涓婏紝CImgDisplay鐨勮璁″氨鏄負瑙e喅榪欎釜闂鑰屽啓鐨勩傛湁浜嗗畠錛屾垜浠彲浠ュ儚鐢∕atlab涓鏍鋒柟渚跨殑鏄劇ず鍥懼儚銆傜涓変釜閲嶈鐨勭被鏄疌ImgList璇ョ被涓昏涓哄鐞嗗簭鍒楀浘鍍忋?br>
璇ュ簱榪樻湁涓涓壒鐐規槸鍙Щ妞嶆э紝鍚屾椂鏀寔Windows鍜宭inux錛孎reeBSD絳夌瓑銆?br>
璇ュ簱鏀寔澶氱鍥懼儚鏍煎紡鐨勮鍙栦笌淇濆瓨錛屼笉榪囦釜浜鴻涓猴紝闄や簡bmp鏂囦歡澶栵紝璇誨彇鍏朵粬鏂囦歡鏃墮兘鏄厛鐢↖mageMagic鐨刢onvert紼嬪簭杞崲鏍煎紡鍦ㄨ鍙栵紝鎵浠ラ熷害寰堟參銆傝鍙朾mp鏂囦歡寰堝揩銆?br>
濡備綍浣跨敤
鍦ㄨ搴撳彂甯冪殑涓嬭澆鏂囦歡涓寘鍚簡寰堝婕旂ず紼嬪簭銆傝浣跨敤瀹冿紝棣栧厛灝嗕笅杞戒笅鏉ョ殑CImg.h鏂囦歡鎷瘋礉鍒頒綘鐨勭紪璇戝櫒鎼滅儲鐨刬nclude鏂囦歡澶逛腑錛岀劧鍚庡湪婧愪唬鐮佸啓涓婏細
#include "CImg.h"
using namespace cimg_library;
灝辮繖涔堢畝鍗曪紝浣犲氨鍙互浣跨敤鎵鏈夌殑搴撳嚱鏁般?br>
涓嬮潰鏄綔鑰呯粰鐨勪竴涓緥瀛愶細
#include "CImg.h"
using namespace cimg_library;
int main() {
CImg<unsigned char> image("lena.jpg"), visu(500,400,1,3,0);
const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 };
image.blur(2.5);
CImgDisplay main_disp(image,"Click a point"), draw_disp(visu,"Intensity profile");
while (!main_disp.is_closed && !draw_disp.is_closed) {
main_disp.wait();
if (main_disp.button && main_disp.mouse_y>=0) {
const int y = main_disp.mouse_y;
visu.fill(0).draw_graph(image.get_crop(0,y,0,0,image.dimx()-1,y,0,0),red,1,255,0);
visu.draw_graph(image.get_crop(0,y,0,1,image.dimx()-1,y,0,1),green,1,255,0);
visu.draw_graph(image.get_crop(0,y,0,2,image.dimx()-1,y,0,2),blue,1,255,0).display(draw_disp);
}
}
return 0;
}
浣犲彲浠ョ洿鎺ュ皢涓婇潰鐨勬簮浠g爜淇濆瓨鍒頒竴涓?cpp鏂囦歡鐒跺悗緙栬瘧鏌ョ湅鏁堟灉銆傚綋鐒訛紝鍦ㄩ」鐩墍鍦ㄦ枃浠跺す涓繀欏誨寘鍚湁鍥劇墖lena.jpg銆?br>
鎶鏈敮鎸?br>
璇ュ簱鏈夐潪甯歌緇嗙殑鏂囨。璇存槑闅忔簮浠g爜涓璧峰彂甯冦俬ttp://cimg.sourceforge.net/index.shtml 榪欐槸sourceforge涓婅欏圭洰鐨勪富欏碉紝鏈夎鍧涳紝鎴戣寰椾綔鑰呴潪甯歌鐪熻礋璐o紝緇忓父鍦ㄤ笂闈負緗戝弸瑙g瓟闂錛岃緇嗙粏鑷淬?br>
]]>
楂樻柉騫蟲粦 楂樻柉妯$硦 楂樻柉婊ゆ嘗鍣細http://blog.csdn.net/hhygcy/archive/2009/07/07/4329056.aspx
瀵筆hotoshop楂樻柉妯$硦婊ら暅鐨勭畻娉曟葷粨 錛?a >http://www.cnblogs.com/hoodlum1980/archive/2008/03/03/1088567.html
]]>
銆銆BMP鏂囦歡鐢辨枃浠跺ご銆佷綅鍥句俊鎭ご銆侀鑹蹭俊鎭拰鍥懼艦鏁版嵁鍥涢儴鍒嗙粍鎴愩傛枃浠跺ご涓昏鍖呭惈鏂囦歡鐨勫ぇ灝忋佹枃浠剁被鍨嬨佸浘鍍忔暟鎹亸紱繪枃浠跺ご鐨勯暱搴︾瓑淇℃伅錛涗綅鍥句俊鎭ご鍖呭惈鍥捐薄鐨勫昂瀵鎬俊鎭佸浘鍍忕敤鍑犱釜姣旂壒鏁板兼潵琛ㄧず涓涓儚绱犮佸浘鍍忔槸鍚﹀帇緙┿佸浘鍍忔墍鐢ㄧ殑棰滆壊鏁扮瓑淇℃伅銆傞鑹蹭俊鎭寘鍚浘鍍忔墍鐢ㄥ埌鐨勯鑹茶〃錛屾樉紺哄浘鍍忔椂闇鐢ㄥ埌榪欎釜棰滆壊琛ㄦ潵鐢熸垚璋冭壊鏉匡紝浣嗗鏋滃浘鍍忎負鐪熷僵鑹詫紝鏃㈠浘鍍忕殑姣忎釜鍍忕礌鐢?4涓瘮鐗規潵琛ㄧず錛屾枃浠朵腑灝辨病鏈夎繖涓鍧椾俊鎭紝涔熷氨涓嶉渶瑕佹搷浣滆皟鑹叉澘銆傛枃浠朵腑鐨勬暟鎹潡琛ㄧず鍥懼儚鐨勭浉搴旂殑鍍忕礌鍊鹼紝闇瑕佹敞鎰忕殑鏄細鍥懼儚鐨勫儚绱犲煎湪鏂囦歡涓殑瀛樻斁欏哄簭涓轟粠宸﹀埌鍙籌紝浠庝笅鍒頒笂錛屼篃灝辨槸璇達紝鍦˙MP鏂囦歡涓鍏堝瓨鏀劇殑鏄浘鍍忕殑鏈鍚庝竴琛屽儚绱狅紝鏈鍚庢墠瀛樺偍鍥懼儚鐨勭涓琛屽儚绱狅紝浣嗗涓庡悓涓琛岀殑鍍忕礌錛屽垯鏄寜鐓у厛宸﹁竟鍚庡彸杈圭殑鐨勯『搴忓瓨鍌ㄧ殑錛涘彟澶栦竴涓渶瑕佽鑰呮湅鍙嬪叧娉ㄧ殑緇嗚妭鏄細鏂囦歡瀛樺偍鍥懼儚鐨勬瘡涓琛屽儚绱犲兼椂錛屽鏋滃瓨鍌ㄨ琛屽儚绱犲兼墍鍗犵殑瀛楄妭鏁頒負4鐨勫嶆暟錛屽垯姝e父瀛樺偍錛屽惁鍒欙紝闇瑕佸湪鍚庣琛?錛屽噾瓚?鐨勫嶆暟銆?
銆銆2. BMP鏂囦歡澶?
銆銆BMP鏂囦歡澶存暟鎹粨鏋勫惈鏈塀MP鏂囦歡鐨勭被鍨嬨佹枃浠跺ぇ灝忓拰浣嶅浘璧峰浣嶇疆絳変俊鎭傚叾緇撴瀯瀹氫箟濡備笅:
2 {
3 WORD bfType; // 浣嶅浘鏂囦歡鐨勭被鍨嬶紝蹇呴』涓?#8220;BM”
4 DWORD bfSize; // 浣嶅浘鏂囦歡鐨勫ぇ灝忥紝浠ュ瓧鑺備負鍗曚綅
5 WORD bfReserved1; // 浣嶅浘鏂囦歡淇濈暀瀛楋紝蹇呴』涓?
6 WORD bfReserved2; // 浣嶅浘鏂囦歡淇濈暀瀛楋紝蹇呴』涓?
7 DWORD bfOffBits; // 浣嶅浘鏁版嵁鐨勮搗濮嬩綅緗紝浠ョ浉瀵逛簬浣嶅浘鏂囦歡澶寸殑鍋忕Щ閲忚〃紺猴紝浠ュ瓧鑺備負鍗曚綅
8 } BITMAPFILEHEADER錛涜緇撴瀯鍗犳嵁14涓瓧鑺傘?nbsp;
銆銆3. 浣嶅浘淇℃伅澶?
銆銆BMP浣嶅浘淇℃伅澶存暟鎹敤浜庤鏄庝綅鍥劇殑灝哄絳変俊鎭傚叾緇撴瀯濡備笅錛?br>
2 DWORD biSize; // 鏈粨鏋勬墍鍗犵敤瀛楄妭鏁?/span>
3 LONG biWidth; // 浣嶅浘鐨勫搴︼紝浠ュ儚绱犱負鍗曚綅
4 LONG biHeight; // 浣嶅浘鐨勯珮搴︼紝浠ュ儚绱犱負鍗曚綅
5 WORD biPlanes; // 鐩爣璁懼鐨勫鉤闈㈡暟涓嶆竻錛屽繀欏諱負1
6 WORD biBitCount// 姣忎釜鍍忕礌鎵闇鐨勪綅鏁幫紝蹇呴』鏄?(鍙岃壊), 4(16鑹?錛?(256鑹?鎴?4(鐪熷僵鑹?涔嬩竴
7 DWORD biCompression; // 浣嶅浘鍘嬬緝綾誨瀷錛屽繀欏繪槸 0(涓嶅帇緙?,1(BI_RLE8鍘嬬緝綾誨瀷)鎴?(BI_RLE4鍘嬬緝綾誨瀷)涔嬩竴
8 DWORD biSizeImage; // 浣嶅浘鐨勫ぇ灝忥紝浠ュ瓧鑺備負鍗曚綅
9 LONG biXPelsPerMeter; // 浣嶅浘姘村鉤鍒嗚鯨鐜囷紝姣忕背鍍忕礌鏁?/span>
10 LONG biYPelsPerMeter; // 浣嶅浘鍨傜洿鍒嗚鯨鐜囷紝姣忕背鍍忕礌鏁?/span>
11 DWORD biClrUsed;// 浣嶅浘瀹為檯浣跨敤鐨勯鑹茶〃涓殑棰滆壊鏁?/span>
12 DWORD biClrImportant;// 浣嶅浘鏄劇ず榪囩▼涓噸瑕佺殑棰滆壊鏁?/span>
13 } BITMAPINFOHEADER錛涜緇撴瀯鍗犳嵁40涓瓧鑺傘?nbsp;
銆銆娉ㄦ剰錛氬浜嶣MP鏂囦歡鏍煎紡錛屽湪澶勭悊鍗曡壊鍥懼儚鍜岀湡褰╄壊鍥懼儚鐨勬椂鍊欙紝鏃犺鍥捐薄鏁版嵁澶氫箞搴炲ぇ錛岄兘涓嶅鍥捐薄鏁版嵁榪涜浠諱綍鍘嬬緝澶勭悊錛屼竴鑸儏鍐典笅錛屽鏋滀綅鍥鵑噰鐢ㄥ帇緙╂牸寮忥紝閭d箞16鑹插浘鍍忛噰鐢≧LE4鍘嬬緝綆楁硶錛?56鑹插浘鍍忛噰鐢≧LE8鍘嬬緝綆楁硶銆?br>
銆銆4. 棰滆壊琛?
銆銆棰滆壊琛ㄧ敤浜庤鏄庝綅鍥句腑鐨勯鑹詫紝瀹冩湁鑻ュ共涓〃欏癸紝姣忎竴涓〃欏規槸涓涓猂GBQUAD綾誨瀷鐨勭粨鏋勶紝瀹氫箟涓縐嶉鑹層俁GBQUAD緇撴瀯鐨勫畾涔夊涓?
2 BYTErgbBlue;// 钃濊壊鐨勪寒搴?鍊艱寖鍥翠負0-255)
3 BYTErgbGreen; // 緇胯壊鐨勪寒搴?鍊艱寖鍥翠負0-255)
4 BYTErgbRed; // 綰㈣壊鐨勪寒搴?鍊艱寖鍥翠負0-255)
5 BYTErgbReserved;// 淇濈暀錛屽繀欏諱負0
6 } RGBQUAD;
銆銆棰滆壊琛ㄤ腑RGBQUAD緇撴瀯鏁版嵁鐨勪釜鏁扮敱BITMAPINFOHEADER 涓殑biBitCount欏規潵紜畾錛屽綋biBitCount=1,4,8鏃訛紝鍒嗗埆鏈?,16,256涓鑹茶〃欏癸紝褰揵iBitCount=24鏃訛紝鍥懼儚涓虹湡褰╄壊錛屽浘鍍忎腑姣忎釜鍍忕礌鐨勯鑹茬敤涓変釜瀛楄妭琛ㄧず錛屽垎鍒搴擱銆丟銆丅鍊鹼紝鍥懼儚鏂囦歡娌℃湁棰滆壊琛ㄩ」銆備綅鍥句俊鎭ご鍜岄鑹茶〃緇勬垚浣嶅浘淇℃伅錛孊ITMAPINFO緇撴瀯瀹氫箟濡備笅:
2 typedef struct tagBITMAPINFO {
3 BITMAPINFOHEADER bmiHeader; // 浣嶅浘淇℃伅澶?/span>
4 RGBQUAD bmiColors[1]; // 棰滆壊琛?/span>
5 } BITMAPINFO;
銆銆娉ㄦ剰錛歊GBQUAD鏁版嵁緇撴瀯涓紝澧炲姞浜嗕竴涓繚鐣欏瓧孌祌gbReserved錛屽畠涓嶄唬琛ㄤ換浣曢鑹詫紝蹇呴』鍙栧浐瀹氱殑鍊間負“0”錛屽悓鏃訛紝RGBQUAD緇撴瀯涓畾涔夌殑棰滆壊鍊間腑錛岀孩鑹層佺豢鑹插拰钃濊壊鐨勬帓鍒楅『搴忎笌涓鑸湡褰╄壊鍥懼儚鏂囦歡鐨勯鑹叉暟鎹帓鍒楅『搴忔伆濂界浉鍙嶏紝鏃細鑻ユ煇涓綅鍥句腑鐨勪竴涓儚绱犵偣鐨勯鑹茬殑鎻忚堪涓?#8220;00錛?0錛宖f錛?0”錛屽垯琛ㄧず璇ョ偣涓虹孩鑹詫紝鑰屼笉鏄摑鑹層?br>
銆銆5. 浣嶅浘鏁版嵁
銆銆浣嶅浘鏁版嵁璁板綍浜嗕綅鍥劇殑姣忎竴涓儚绱犲兼垨璇ュ搴斿儚绱犵殑棰滆壊琛ㄧ殑绱㈠紩鍊鹼紝鍥懼儚璁板綍欏哄簭鏄湪鎵弿琛屽唴鏄粠宸﹀埌鍙?鎵弿琛屼箣闂存槸浠庝笅鍒頒笂銆傝繖縐嶆牸寮忔垜浠張縐頒負Bottom_Up浣嶅浘錛屽綋鐒朵笌涔嬬浉瀵圭殑榪樻湁Up_Down褰㈠紡鐨勪綅鍥撅紝瀹冪殑璁板綍欏哄簭鏄粠涓婂埌涓嬬殑錛屽浜庤繖縐嶅艦寮忕殑浣嶅浘錛屼篃涓嶅瓨鍦ㄥ帇緙╁艦寮忋備綅鍥劇殑涓涓儚绱犲兼墍鍗犵殑瀛楄妭鏁幫細褰揵iBitCount=1鏃訛紝8涓儚绱犲崰1涓瓧鑺傦紱褰揵iBitCount=4鏃訛紝2涓儚绱犲崰1涓瓧鑺傦紱褰揵iBitCount=8鏃訛紝1涓儚绱犲崰1涓瓧鑺傦紱褰揵iBitCount=24鏃?1涓儚绱犲崰3涓瓧鑺傦紝姝ゆ椂鍥懼儚涓虹湡褰╄壊鍥懼儚銆傚綋鍥懼儚涓嶆槸涓虹湡褰╄壊鏃訛紝鍥懼儚鏂囦歡涓寘鍚鑹茶〃錛屼綅鍥劇殑鏁版嵁琛ㄧず瀵瑰簲鍍忕礌鐐瑰湪棰滆壊琛ㄤ腑鐩稿簲鐨勭儲寮曞鹼紝褰撲負鐪熷僵鑹叉椂錛屾瘡涓涓儚绱犵敤涓変釜瀛楄妭琛ㄧず鍥懼儚鐩稿簲鍍忕礌鐐瑰僵鑹插鹼紝姣忎釜瀛楄妭鍒嗗埆瀵瑰簲R銆丟銆丅鍒嗛噺鐨勫鹼紝榪欐椂鍊欏浘鍍忔枃浠朵腑娌℃湁棰滆壊琛ㄣ備笂闈㈡垜宸茬粡璁茶繃浜嗭紝Windows瑙勫畾鍥懼儚鏂囦歡涓竴涓壂鎻忚鎵鍗犵殑瀛楄妭鏁板繀欏繪槸4鐨勫嶆暟(鍗充互瀛椾負鍗曚綅),涓嶈凍鐨勪互0濉厖錛屽浘鍍忔枃浠朵腑涓涓壂鎻忚鎵鍗犵殑瀛楄妭鏁拌綆楁柟娉曪細
2
3 鎴栬?br> 4 DataSizePerLine= (biWidth* biBitCount+31)/32 * 4錛?/span>// 涓涓壂鎻忚鎵鍗犵殑瀛楄妭鏁?nbsp;
5
6 (濡傛灉biBitCount == 8 鎴?4)
7
8 DataSizePerLine= (biWidth* 3+3)/4*4錛?/span>// 涓涓壂鎻忚鎵鍗犵殑瀛楄妭鏁?nbsp;
9
10 鎴?br>11
12 DataSizePerLine= (biWidth*1+3)/4*4錛?/span>// 涓涓壂鎻忚鎵鍗犵殑瀛楄妭鏁?nbsp;
13
銆銆浣嶅浘鏁版嵁鐨勫ぇ灝忔寜涓嬪紡璁$畻(涓嶅帇緙╂儏鍐典笅)錛?br>
銆銆DataSize= DataSizePerLine* biHeight銆?
銆銆涓婅堪鏄疊MP鏂囦歡鏍煎紡鐨勮鏄庯紝鎼炴竻妤氫簡浠ヤ笂鐨勭粨鏋勶紝灝卞彲浠ユ紜殑鎿嶄綔鍥懼儚鏂囦歡錛屽瀹冭繘琛岃鎴栧啓鎿嶄綔浜嗐?br>
]]>
銆銆鏍規嵁涓夊熀鑹插師鐞嗭紝浠繪剰涓縐嶈壊鍏?span>F閮藉彲浠ョ敤涓嶅悓鍒嗛噺鐨?span>R銆?span>G銆?span>B涓夎壊鐩稿姞娣峰悎鑰屾垚銆?/span>
F = r [ R ] + g [ G ] + b [ B ]
銆銆鍏朵腑錛?span>r銆?span>g銆?span>b鍒嗗埆涓轟笁鍩鴻壊鍙備笌娣峰悎鐨勭郴鏁般傚綋涓夊熀鑹插垎閲忛兘涓?span>0錛堟渶寮憋級鏃舵販鍚堜負榛戣壊鍏夛紱鑰屽綋涓夊熀鑹插垎閲忛兘涓?span>k錛堟渶寮猴級鏃舵販鍚堜負鐧借壊鍏夈傝皟鏁?span>r銆?span>g銆?span>b涓変釜緋繪暟鐨勫鹼紝鍙互娣峰悎鍑轟粙浜庨粦鑹插厜鍜岀櫧鑹插厜涔嬮棿鐨勫悇縐嶅悇鏍風殑鑹插厜銆?/span>
閭d箞YUV鍙堜粠浣曡屾潵鍛紵鍦ㄧ幇浠e僵鑹茬數瑙嗙郴緇熶腑錛岄氬父閲囩敤涓夌褰╄壊鎽勫儚鏈烘垨褰╄壊CCD鎽勫儚鏈鴻繘琛屾憚鍍忥紝鐒跺悗鎶婃憚寰楃殑褰╄壊鍥懼儚淇″彿緇忓垎鑹層佸垎鍒斁澶ф牎姝e悗寰楀埌RGB錛屽啀緇忚繃鐭╅樀鍙樻崲鐢佃礬寰楀埌浜害淇″彿Y鍜屼袱涓壊宸俊鍙?span>R錛?span>Y錛堝嵆U錛夈?span>B錛?span>Y錛堝嵆V錛夛紝鏈鍚庡彂閫佺灝嗕寒搴﹀拰鑹插樊涓変釜淇″彿鍒嗗埆榪涜緙栫爜錛岀敤鍚屼竴淇¢亾鍙戦佸嚭鍘匯傝繖縐嶈壊褰╃殑琛ㄧず鏂規硶灝辨槸鎵璋撶殑YUV鑹插僵絀洪棿琛ㄧず銆?/span>
閲囩敤YUV鑹插僵絀洪棿鐨勯噸瑕佹ф槸瀹冪殑浜害淇″彿Y鍜岃壊搴︿俊鍙?span>U銆?span>V鏄垎紱葷殑銆傚鏋滃彧鏈?span>Y淇″彿鍒嗛噺鑰屾病鏈?span>U銆?span>V鍒嗛噺錛岄偅涔堣繖鏍瘋〃紺虹殑鍥懼儚灝辨槸榛戠櫧鐏板害鍥懼儚銆傚僵鑹茬數瑙嗛噰鐢?span>YUV絀洪棿姝f槸涓轟簡鐢ㄤ寒搴︿俊鍙?span>Y瑙e喅褰╄壊鐢佃鏈轟笌榛戠櫧鐢佃鏈虹殑鍏煎闂錛屼嬌榛戠櫧鐢佃鏈轟篃鑳芥帴鏀跺僵鑹茬數瑙嗕俊鍙楓?/span>
銆銆YUV涓?span>RGB鐩鎬簰杞崲鐨勫叕寮忓涓嬶紙RGB鍙栧艱寖鍥村潎涓?span>0-255錛夛細
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
銆銆鍦?span>DirectShow涓紝甯歌鐨?span>RGB鏍煎紡鏈?span>RGB1銆?span>RGB4銆?span>RGB8銆?span>RGB565銆?span>RGB555銆?span>RGB24銆?span>RGB32銆?span>ARGB32絳夛紱甯歌鐨?span>YUV鏍煎紡鏈?span>YUY2銆?span>YUYV銆?span>YVYU銆?span>UYVY銆?span>AYUV銆?span>Y41P銆?span>Y411銆?span>Y211銆?span>IF09銆?span>IYUV銆?span>YV12銆?span>YVU9銆?span>YUV411銆?span>YUV420絳夈備綔涓鴻棰戝獟浣撶被鍨嬬殑杈呭姪璇存槑綾誨瀷錛?span>Subtype錛夛紝瀹冧滑瀵瑰簲鐨?span>GUID瑙佽〃2.3銆?/span>
銆銆琛?span>2.3 甯歌鐨?span>RGB鍜?span>YUV鏍煎紡
GUID 鏍煎紡鎻忚堪
MEDIASUBTYPE_RGB1 2鑹詫紝姣忎釜鍍忕礌鐢?span>1浣嶈〃紺猴紝闇瑕佽皟鑹叉澘
MEDIASUBTYPE_RGB4 16鑹詫紝姣忎釜鍍忕礌鐢?span>4浣嶈〃紺猴紝闇瑕佽皟鑹叉澘
MEDIASUBTYPE_RGB8 256鑹詫紝姣忎釜鍍忕礌鐢?span>8浣嶈〃紺猴紝闇瑕佽皟鑹叉澘
MEDIASUBTYPE_RGB565 姣忎釜鍍忕礌鐢?span>16浣嶈〃紺猴紝RGB鍒嗛噺鍒嗗埆浣跨敤5浣嶃?span>6浣嶃?span>5浣?/span>
MEDIASUBTYPE_RGB555 姣忎釜鍍忕礌鐢?span>16浣嶈〃紺猴紝RGB鍒嗛噺閮戒嬌鐢?span>5浣嶏紙鍓╀笅鐨?span>1浣嶄笉鐢級
MEDIASUBTYPE_RGB24 姣忎釜鍍忕礌鐢?span>24浣嶈〃紺猴紝RGB鍒嗛噺鍚勪嬌鐢?span>8浣?/span>
MEDIASUBTYPE_RGB32 姣忎釜鍍忕礌鐢?span>32浣嶈〃紺猴紝RGB鍒嗛噺鍚勪嬌鐢?span>8浣嶏紙鍓╀笅鐨?span>8浣嶄笉鐢級
MEDIASUBTYPE_ARGB32 姣忎釜鍍忕礌鐢?span>32浣嶈〃紺猴紝RGB鍒嗛噺鍚勪嬌鐢?span>8浣嶏紙鍓╀笅鐨?span>8浣嶇敤浜庤〃紺?span>Alpha閫氶亾鍊鹼級
MEDIASUBTYPE_YUY2 YUY2鏍煎紡錛屼互4:2:2鏂瑰紡鎵撳寘
MEDIASUBTYPE_YUYV YUYV鏍煎紡錛堝疄闄呮牸寮忎笌YUY2鐩稿悓錛?/span>
MEDIASUBTYPE_YVYU YVYU鏍煎紡錛屼互4:2:2鏂瑰紡鎵撳寘
MEDIASUBTYPE_UYVY UYVY鏍煎紡錛屼互4:2:2鏂瑰紡鎵撳寘
MEDIASUBTYPE_AYUV 甯?span>Alpha閫氶亾鐨?span>4:4:4 YUV鏍煎紡
MEDIASUBTYPE_Y41P Y41P鏍煎紡錛屼互4:1:1鏂瑰紡鎵撳寘
MEDIASUBTYPE_Y411 Y411鏍煎紡錛堝疄闄呮牸寮忎笌Y41P鐩稿悓錛?/span>
MEDIASUBTYPE_Y211 Y211鏍煎紡
MEDIASUBTYPE_IF09 IF09鏍煎紡
MEDIASUBTYPE_IYUV IYUV鏍煎紡
MEDIASUBTYPE_YV12 YV12鏍煎紡
MEDIASUBTYPE_YVU9 YVU9鏍煎紡
銆銆涓嬮潰鍒嗗埆浠嬬粛鍚勭RGB鏍煎紡銆?/span>
銆銆RGB1銆?span>RGB4銆?span>RGB8閮芥槸璋冭壊鏉跨被鍨嬬殑RGB鏍煎紡錛屽湪鎻忚堪榪欎簺濯掍綋綾誨瀷鐨勬牸寮忕粏鑺傛椂錛岄氬父浼氬湪BITMAPINFOHEADER鏁版嵁緇撴瀯鍚庨潰璺熺潃涓涓皟鑹叉澘錛堝畾涔変竴緋誨垪棰滆壊錛夈傚畠浠殑鍥懼儚鏁版嵁騫朵笉鏄湡姝g殑棰滆壊鍊鹼紝鑰屾槸褰撳墠鍍忕礌棰滆壊鍊煎湪璋冭壊鏉夸腑鐨勭儲寮曘備互RGB1錛?span>2鑹蹭綅鍥撅級涓轟緥錛屾瘮濡傚畠鐨勮皟鑹叉澘涓畾涔夌殑涓ょ棰滆壊鍊間緷嬈′負0x000000錛堥粦鑹詫級鍜?span>0xFFFFFF錛堢櫧鑹詫級錛岄偅涔堝浘鍍忔暟鎹?span>001101010111…錛堟瘡涓儚绱犵敤1浣嶈〃紺猴級琛ㄧず瀵瑰簲鍚勫儚绱犵殑棰滆壊涓猴細榛戦粦鐧界櫧榛戠櫧榛戠櫧榛戠櫧鐧界櫧…銆?/span>
銆銆RGB565浣跨敤16浣嶈〃紺轟竴涓儚绱狅紝榪?span>16浣嶄腑鐨?span>5浣嶇敤浜?span>R錛?span>6浣嶇敤浜?span>G錛?span>5浣嶇敤浜?span>B銆傜▼搴忎腑閫氬父浣跨敤涓涓瓧錛?span>WORD錛屼竴涓瓧絳変簬涓や釜瀛楄妭錛夋潵鎿嶄綔涓涓儚绱犮傚綋璇誨嚭涓涓儚绱犲悗錛岃繖涓瓧鐨勫悇涓綅鎰忎箟濡備笅錛?/span>
楂樺瓧鑺?span> 浣庡瓧鑺?/span>
R R R R R G G G G G G B B B B B
鍙互緇勫悎浣跨敤灞忚斀瀛楀拰縐諱綅鎿嶄綔鏉ュ緱鍒?span>RGB鍚勫垎閲忕殑鍊鹼細
#define RGB565_MASK_RED 0xF800
#define RGB565_MASK_GREEN 0x07E0
#define RGB565_MASK_BLUE 0x001F
R = (wPixel & RGB565_MASK_RED) >> 11; // 鍙栧艱寖鍥?span>0-31
G = (wPixel & RGB565_MASK_GREEN) >> 5; // 鍙栧艱寖鍥?span>0-63
B = wPixel & RGB565_MASK_BLUE; // 鍙栧艱寖鍥?span>0-31
銆銆RGB555鏄彟涓縐?span>16浣嶇殑RGB鏍煎紡錛?span>RGB鍒嗛噺閮界敤5浣嶈〃紺猴紙鍓╀笅鐨?span>1浣嶄笉鐢級銆備嬌鐢ㄤ竴涓瓧璇誨嚭涓涓儚绱犲悗錛岃繖涓瓧鐨勫悇涓綅鎰忎箟濡備笅錛?/span>
楂樺瓧鑺?span> 浣庡瓧鑺?/span>
X R R R R G G G G G B B B B B 錛?span>X琛ㄧず涓嶇敤錛屽彲浠ュ拷鐣ワ級
鍙互緇勫悎浣跨敤灞忚斀瀛楀拰縐諱綅鎿嶄綔鏉ュ緱鍒?span>RGB鍚勫垎閲忕殑鍊鹼細
#define RGB555_MASK_RED 0x7C00
#define RGB555_MASK_GREEN 0x03E0
#define RGB555_MASK_BLUE 0x001F
R = (wPixel & RGB555_MASK_RED) >> 10; // 鍙栧艱寖鍥?span>0-31
G = (wPixel & RGB555_MASK_GREEN) >> 5; // 鍙栧艱寖鍥?span>0-31
B = wPixel & RGB555_MASK_BLUE; // 鍙栧艱寖鍥?span>0-31
銆銆RGB24浣跨敤24浣嶆潵琛ㄧず涓涓儚绱狅紝RGB鍒嗛噺閮界敤8浣嶈〃紺猴紝鍙栧艱寖鍥翠負0-255銆傛敞鎰忓湪鍐呭瓨涓?span>RGB鍚勫垎閲忕殑鎺掑垪欏哄簭涓猴細BGR BGR BGR…銆傞氬父鍙互浣跨敤RGBTRIPLE鏁版嵁緇撴瀯鏉ユ搷浣滀竴涓儚绱狅紝瀹冪殑瀹氫箟涓猴細
typedef struct tagRGBTRIPLE {
BYTE rgbtBlue; // 钃濊壊鍒嗛噺
BYTE rgbtGreen; // 緇胯壊鍒嗛噺
BYTE rgbtRed; // 綰㈣壊鍒嗛噺
} RGBTRIPLE;
銆銆RGB32浣跨敤32浣嶆潵琛ㄧず涓涓儚绱狅紝RGB鍒嗛噺鍚勭敤鍘?span>8浣嶏紝鍓╀笅鐨?span>8浣嶇敤浣?span>Alpha閫氶亾鎴栬呬笉鐢ㄣ傦紙ARGB32灝辨槸甯?span>Alpha閫氶亾鐨?span>RGB32銆傦級娉ㄦ剰鍦ㄥ唴瀛樹腑RGB鍚勫垎閲忕殑鎺掑垪欏哄簭涓猴細BGRA BGRA BGRA…銆傞氬父鍙互浣跨敤RGBQUAD鏁版嵁緇撴瀯鏉ユ搷浣滀竴涓儚绱狅紝瀹冪殑瀹氫箟涓猴細
typedef struct tagRGBQUAD {
BYTE rgbBlue; // 钃濊壊鍒嗛噺
BYTE rgbGreen; // 緇胯壊鍒嗛噺
BYTE rgbRed; // 綰㈣壊鍒嗛噺
BYTE rgbReserved; // 淇濈暀瀛楄妭錛堢敤浣?span>Alpha閫氶亾鎴栧拷鐣ワ級
} RGBQUAD;
銆銆銆涓嬮潰浠嬬粛鍚勭YUV鏍煎紡銆?span>YUV鏍煎紡閫氬父鏈変袱澶х被錛氭墦鍖咃紙packed錛夋牸寮忓拰騫抽潰錛?span>planar錛夋牸寮忋傚墠鑰呭皢YUV鍒嗛噺瀛樻斁鍦ㄥ悓涓涓暟緇勪腑錛岄氬父鏄嚑涓浉閭葷殑鍍忕礌緇勬垚涓涓畯鍍忕礌錛?span>macro-pixel錛夛紱鑰屽悗鑰呬嬌鐢ㄤ笁涓暟緇勫垎寮瀛樻斁YUV涓変釜鍒嗛噺錛屽氨鍍忔槸涓涓笁緇村鉤闈竴鏍楓傝〃2.3涓殑YUY2鍒?span>Y211閮芥槸鎵撳寘鏍煎紡錛岃?span>IF09鍒?span>YVU9閮芥槸騫抽潰鏍煎紡銆傦紙娉ㄦ剰錛氬湪浠嬬粛鍚勭鍏蜂綋鏍煎紡鏃訛紝YUV鍚勫垎閲忛兘浼氬甫鏈変笅鏍囷紝濡?span>Y0銆?span>U0銆?span>V0琛ㄧず絎竴涓儚绱犵殑YUV鍒嗛噺錛?span>Y1銆?span>U1銆?span>V1琛ㄧず絎簩涓儚绱犵殑YUV鍒嗛噺錛屼互姝ょ被鎺ㄣ傦級
銆銆銆YUY2錛堝拰YUYV錛夋牸寮忎負姣忎釜鍍忕礌淇濈暀Y鍒嗛噺錛岃?span>UV鍒嗛噺鍦ㄦ按騫蟲柟鍚戜笂姣忎袱涓儚绱犻噰鏍蜂竴嬈°備竴涓畯鍍忕礌涓?span>4涓瓧鑺傦紝瀹為檯琛ㄧず2涓儚绱犮傦紙4:2:2鐨勬剰鎬濅負涓涓畯鍍忕礌涓湁4涓?span>Y鍒嗛噺銆?span>2涓?span>U鍒嗛噺鍜?span>2涓?span>V鍒嗛噺銆傦級鍥懼儚鏁版嵁涓?span>YUV鍒嗛噺鎺掑垪欏哄簭濡備笅錛?/span>
Y0 U0 Y1 V0 Y2 U2 Y3 V2 …
銆銆YVYU鏍煎紡璺?span>YUY2綾諱技錛屽彧鏄浘鍍忔暟鎹腑YUV鍒嗛噺鐨勬帓鍒楅『搴忔湁鎵涓嶅悓錛?/span>
Y0 V0 Y1 U0 Y2 V2 Y3 U2 …
銆銆UYVY鏍煎紡璺?span>YUY2綾諱技錛屽彧鏄浘鍍忔暟鎹腑YUV鍒嗛噺鐨勬帓鍒楅『搴忔湁鎵涓嶅悓錛?/span>
U0 Y0 V0 Y1 U2 Y2 V2 Y3 …
銆銆AYUV鏍煎紡甯︽湁涓涓?span>Alpha閫氶亾錛屽茍涓斾負姣忎釜鍍忕礌閮芥彁鍙?span>YUV鍒嗛噺錛屽浘鍍忔暟鎹牸寮忓涓嬶細
A0 Y0 U0 V0 A1 Y1 U1 V1 …
銆銆Y41P錛堝拰Y411錛夋牸寮忎負姣忎釜鍍忕礌淇濈暀Y鍒嗛噺錛岃?span>UV鍒嗛噺鍦ㄦ按騫蟲柟鍚戜笂姣?span>4涓儚绱犻噰鏍蜂竴嬈°備竴涓畯鍍忕礌涓?span>12涓瓧鑺傦紝瀹為檯琛ㄧず8涓儚绱犮傚浘鍍忔暟鎹腑YUV鍒嗛噺鎺掑垪欏哄簭濡備笅錛?/span>
U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y8 …
銆銆Y211鏍煎紡鍦ㄦ按騫蟲柟鍚戜笂Y鍒嗛噺姣?span>2涓儚绱犻噰鏍蜂竴嬈★紝鑰?span>UV鍒嗛噺姣?span>4涓儚绱犻噰鏍蜂竴嬈°備竴涓畯鍍忕礌涓?span>4涓瓧鑺傦紝瀹為檯琛ㄧず4涓儚绱犮傚浘鍍忔暟鎹腑YUV鍒嗛噺鎺掑垪欏哄簭濡備笅錛?/span>
Y0 U0 Y2 V0 Y4 U4 Y6 V4 …
銆銆YVU9鏍煎紡涓烘瘡涓儚绱犻兘鎻愬彇Y鍒嗛噺錛岃屽湪UV鍒嗛噺鐨勬彁鍙栨椂錛岄鍏堝皢鍥懼儚鍒嗘垚鑻ュ共涓?span>4 x 4鐨勫畯鍧楋紝鐒跺悗姣忎釜瀹忓潡鎻愬彇涓涓?span>U鍒嗛噺鍜屼竴涓?span>V鍒嗛噺銆傚浘鍍忔暟鎹瓨鍌ㄦ椂錛岄鍏堟槸鏁村箙鍥懼儚鐨?span>Y鍒嗛噺鏁扮粍錛岀劧鍚庡氨璺熺潃U鍒嗛噺鏁扮粍錛屼互鍙?span>V鍒嗛噺鏁扮粍銆?span>IF09鏍煎紡涓?span>YVU9綾諱技銆?/span>
銆銆IYUV鏍煎紡涓烘瘡涓儚绱犻兘鎻愬彇Y鍒嗛噺錛岃屽湪UV鍒嗛噺鐨勬彁鍙栨椂錛岄鍏堝皢鍥懼儚鍒嗘垚鑻ュ共涓?span>2 x 2鐨勫畯鍧楋紝鐒跺悗姣忎釜瀹忓潡鎻愬彇涓涓?span>U鍒嗛噺鍜屼竴涓?span>V鍒嗛噺銆?span>YV12鏍煎紡涓?span>IYUV綾諱技銆?/span>
銆銆YUV411銆?span>YUV420鏍煎紡澶氳浜?span>DV鏁版嵁涓紝鍓嶈呯敤浜?span>NTSC鍒訛紝鍚庤呯敤浜?span>PAL鍒躲?span>YUV411涓烘瘡涓儚绱犻兘鎻愬彇Y鍒嗛噺錛岃?span>UV鍒嗛噺鍦ㄦ按騫蟲柟鍚戜笂姣?span>4涓儚绱犻噰鏍蜂竴嬈°?span>YUV420騫墮潪V鍒嗛噺閲囨牱涓?span>0錛岃屾槸璺?span>YUV411鐩告瘮錛屽湪姘村鉤鏂瑰悜涓婃彁楂樹竴鍊嶈壊宸噰鏍烽鐜囷紝鍦ㄥ瀭鐩存柟鍚戜笂浠?span>U/V闂撮殧鐨勬柟寮忓噺灝忎竴鍗婅壊宸噰鏍楓?/span>
]]>
鍩烘湰璁捐姒傚康鍜屽鐞嗘祦紼?/p>
鍩轟簬浜嬩歡椹卞姩鐨勬暟鎹鐞嗘ā鍨?/p>
鍐嶈咃紝鏍規嵁緗戠粶,鏁版嵁搴撶瓑鐗瑰畾鍔熻兘錛屾瀯寤虹綉緇滐紝鏁版嵁搴撶瓑綆$悊鏈嶅姟錛屽疄鐜版暟鎹槦鍒楁湇鍔¢挬瀛怮ueueServiceSink鏂規硶錛岃皟搴︿簨浠舵暟鎹墽琛屽閮ㄥ
妗嗘灦浣撶郴璁捐
]]>
涓栫晫鍙樻崲
涓栫晫鍙樻崲灝辨槸灝嗙墿浣撻《鐐瑰潗鏍囦粠妯″瀷絀洪棿杞崲鍒頒笘鐣岀┖闂淬傚湪妯″瀷絀洪棿閲岋紝欏剁偣浣嶇疆鍧愭爣渚濇嵁妯″瀷鐨勬湰鍦板潗鏍囩郴鐨勫師鐐硅屽畾錛屽湪涓栫晫絀洪棿閲岋紝鎵鏈夋ā鍨嬬殑欏剁偣鍏辯敤涓涓師鐐癸紝鍗充笘鐣屽潗鏍囩郴鍘熺偣銆備簨瀹炰笂錛屼笘鐣屽彉鎹㈠氨鏄皢涓涓ā鍨嬩粠鏈湴絀洪棿閲嶆柊瀹氫綅鍒頒笘鐣岀┖闂村唴銆備粠妯″瀷絀洪棿鍒頒笘鐣岀┖闂寸殑杞崲瀹為檯涓婂氨鏄妯″瀷榪涜騫崇Щ銆佹棆杞佺緝鏀句互鍙婂畠浠殑浠繪剰緇勫悎鍙樻崲銆?/p>
浣跨敤涓夌淮妯″瀷鍒朵綔杞歡錛屼緥濡?dmax錛屽埗浣滀笁緇存ā鍨嬫椂錛岄鍏堥渶瑕佷負妯″瀷璁懼畾涓涓潗鏍囩郴錛屾ā鍨嬩笂鐨勯《鐐瑰潗鏍囧氨鏄瀹氱殑妯″瀷鑷韓鍧愭爣緋諱笅鐨勫潗鏍囷紝榪欎釜鍧愭爣緋諱篃灝辨槸涓婇潰鎻愬埌鐨勬湰鍦板潗鏍囩郴鎴栨ā鍨嬬┖闂淬?/p>
1銆佷笘鐣屽彉鎹㈢煩闃?/strong>
鍦ㄥ鐞嗕笁緇村浘鍍忕殑搴旂敤紼嬪簭涓紝鍙嬌鐢ㄤ笘鐣屽彉鎹㈠畬鎴愪竴涓墿浣擄紙紜垏鐨勮鏄竴涓潗鏍囨垨涓緋誨垪鍧愭爣錛夌殑騫崇Щ銆佹棆杞拰緙╂斁銆傚綋鐒朵篃鍙互瀹屾垚榪欎笁縐嶅彉鎹㈢殑浠繪剰緇勫悎銆傚叿浣撶殑鏂規硶灝辨槸閫氳繃涓嬪紡錛?/p>
灝嗕換鎰忎竴鐐筆(x, y, z)杞崲鍒皃'(x', y', z')錛屼笂寮忎篃鍙互琛ㄧず涓轟互涓嬪艦寮忥細
p'(x', y', z') = P(x, y, z) . Mworld
Mworld灝辨槸涓栫晫鍙樻崲鐭╅樀銆備篃灝辨槸瀹冨疄鐜頒簡鐗╀綋鐨勫鉤縐匯佹棆杞佺緝鏀懼拰瀹冧滑鐨勫鍚堝彉鎹€傚湪瀹氫箟濂戒笘鐣屽彉鎹㈢煩闃靛悗錛岃皟鐢ㄥ嚱鏁癐Direct3DDevice9::SetTransform()騫舵寚瀹氱涓涓弬鏁頒負D3DTS_WORLD錛岀浜屼釜鍙傛暟涓虹浉搴旂殑涓栫晫鍙樻崲鐭╅樀鍗沖彲銆?/p>
2銆佸鉤縐?/strong>
鍙互閫氳繃涓嬪紡錛堜篃灝辨槸涓嬮潰鐨勫鉤縐誨彉鎹㈢煩闃碉級錛?/p>
灝嗙偣錛坸, y, z錛夋部x銆亂鍜寊杞村垎鍒Щ鍔═x銆乀y銆乀z錛屽埌鍙︿竴鐐癸紙x'錛寉'錛寊'錛夈傚緢鏄劇劧錛屽彧瑕佸緱鍒頒簡榪欎釜騫崇Щ鐭╅樀錛屽鉤縐誨伐浣滃氨鍙互瀹屾垚銆?/p>
涓烘柟渚胯搗瑙侊紝D3DX鎵╁睍鍑芥暟搴揹3dx9.lib鎻愪緵浜嗗嚱鏁癉3DXMatrixTranslation()錛岀敤瀹冨彲浠ュ緢鏂逛究鍦扮敓鎴愪竴涓鉤縐諱笘鐣岀煩闃點傝鍑芥暟鐨勫0鏄庡涓?
Builds a matrix using the specified offsets.
D3DXMATRIX * D3DXMatrixTranslation(
D3DXMATRIX * pOut,
FLOAT x,
FLOAT y,
FLOAT z
);
Pointer to a D3DXMATRIX structure that contains a translated transformation matrix.
The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMATRIXTranslation can be used as a parameter for another function.
3銆佹棆杞?/strong>
涓庡鉤縐葷被浼鹼紝浣跨敤涓嬮潰鐨勫洓闃剁煩闃靛彲浠ュ皢鐐癸紙x, y, z錛夌粫x杞存棆杞?#952;瑙掞紝鍒版柊鐐癸紙x', y', z'錛?
緇晊杞存棆杞?#952;瑙掓椂鐨勭煩闃典負錛?/p>
緇晍杞存棆杞?#952;瑙掓椂鐨勭煩闃典負錛?/p>
θ鎸囨棆杞搴︼紝鍗曚綅鏄姬搴︼紝鍏蜂綋鏄寚娌跨潃鏃嬭漿杞寸殑鎸囧悜錛堝嵆姝f柟鍚戯級鍚戝潗鏍囧師鐐圭湅鍘婚『鎸囬拡鏃嬭漿榪囩殑瑙掑害銆?/p>
鍚屾牱鍙互浣跨敤D3DX鎵╁睍鍑芥暟搴揹3dx9.lib鎻愪緵鐨勫嚱鏁癉3DXMatrixRotationX()銆丏3DXMatrixRotationY()鍜孌3DXMatrixRotationZ()鏂逛究鍦板垱寤烘棆杞煩闃碉紝榪欎笁涓嚱鏁扮殑澹版槑濡備笅錛屽洜澹版槑綾諱技錛屽彧鍒楀嚭D3DXMatrixRotationX()鐨勪嬌鐢ㄨ鏄?
Builds a matrix that rotates around the x-axis.
D3DXMATRIX * D3DXMatrixRotationX(
D3DXMATRIX * pOut,
FLOAT Angle
);
Pointer to a D3DXMATRIX structure rotated around the x-axis.
The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixRotationX function can be used as a parameter for another function.
4銆佺緝鏀?/strong>
浣跨敤涓嬮潰鐨勫洓闃剁煩闃靛彲浠ュ皢鐐癸紙x, y, z錛夊湪x銆亂銆亃杞翠笂鍚勭緝鏀維x銆丼y銆丼z錛屽埌鍙︿竴鐐癸紙x', y', z'錛夈?/p>
鍚屾牱錛屽彲浠ヤ嬌鐢―irect3D鎵╁睍瀹炵敤搴撲腑鐨勫嚱鏁癉3DXMatrixScaling()鏉ョ敓鎴愮緝鏀劇煩闃碉紝璇ュ嚱鏁扮殑澹版槑濡備笅錛?/p>
Builds a matrix that scales along the x-axis, the y-axis, and the z-axis.
D3DXMATRIX * D3DXMatrixScaling(
D3DXMATRIX * pOut,
FLOAT sx,
FLOAT sy,
FLOAT sz
);
Pointer to the scaling transformation D3DXMATRIX.
The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixScaling function can be used as a parameter for another function.
5銆佺煩闃佃繛鎺ヤ笌澶嶅悎鍙樻崲
鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝Direct3D涓殑鐗╀綋闇瑕佽繘琛岀殑涓栫晫鍙樻崲涓嶆涓涓紝鑰屽線寰鏄涓笘鐣屽彉鎹㈢殑緇勫悎錛岃繖鏃跺彲浠ヤ嬌鐢ㄧ煩闃佃繛鎺ユ潵瀹炵幇榪欑澶嶅悎鍙樻崲銆傚洜涓虹煩闃電殑涓涓紭鐐規槸閫氳繃鐭╅樀鐨勭浉涔橈紝灝嗕袱涓垨鏇村鐭╅樀鐨勪綔鐢ㄥ悎騫跺湪涓璧峰疄鐜般備負浜嗗厛鍚庡疄鐜頒竴涓ā鍨嬬殑鏃嬭漿鍜岀Щ鍔紝涓嶉渶瑕佷嬌鐢ㄤ袱涓煩闃碉紝鍙互灝嗘棆杞煩闃靛拰騫崇Щ鐭╅樀鐩鎬箻寰楀埌涓涓鍚堢煩闃典互瀹炵幇鎵鏈夊姛鑳姐傝繖涓繃紼嬪彨鍋氱煩闃佃繛鎺ワ紙matrix concatention錛夛紝鍙互鐢ㄤ笅闈㈢殑鍏紡琛ㄧず錛?/p>
C = M1 * M2 * ... * Mn-1 * Mn
鍦ㄨ繖涓叕寮忛噷錛孋鏄疄鐜板鍚堝彉鎹㈢殑澶嶅悎鐭╅樀錛屼粠M1鍒癕n鏄彧鑳藉疄鐜版煇涓縐嶄笘鐣屽彉鎹㈢殑鍗曠嫭鐭╅樀錛坕ndividual matrices錛夈傚ぇ澶氭暟鎯呭喌涓嬫槸涓ゅ埌涓変釜鐭╅樀榪炴帴錛屼絾榪欎釜鏁伴噺娌℃湁闄愬埗銆?/p>
浣跨敤鍑芥暟D3DXMatrixMultiply() 鍙畬鎴愮煩闃電殑涔樻硶錛岃鍑芥暟鐨勮鏄庡涓嬶細
Determines the product of two matrices.
D3DXMATRIX * D3DXMatrixMultiply(
D3DXMATRIX * pOut,
CONST D3DXMATRIX * pM1,
CONST D3DXMATRIX * pM2
);
Pointer to a D3DXMATRIX structure that is the product of two matrices.
The result represents the transformation M1 followed by the transformation M2 (Out = M1 * M2).
The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixMultiply function can be used as a parameter for another function.
鐭╅樀pOut琛ㄧず鏈緇堢殑澶嶅悎鍙樻崲錛屼篃灝辨槸鍏堣繘琛岀煩闃祊M1琛ㄧず鐨勫彉鎹紝鐒跺悗鍙堣繘琛岀煩闃祊M2琛ㄧず鐨勫彉鎹€?/p>
鍦ㄧ煩闃電殑涔樻硶涓紝欏哄簭鏄緢鍏抽敭鐨勩傛棤璁鴻鍒涘緩浠涔堟牱鐨勪笘鐣屽彉鎹㈢煩闃碉紝璁頒綇浠庡乏鍒板彸鐨勫師鍒欐墠鑳界‘淇濆疄鐜版兂瑕佺殑鏁堟灉錛屼篃灝辨槸璇達紝涓涓鍚堢煩闃電殑瑙嗚鏁堟灉鏄寜浠庡乏鍒板彸鐨勯『搴忓悇鍗曠嫭鐭╅樀瑙嗚鏁堟灉鐨勭粍鍚堛?/font>鍋囪涓涓墿浣撳厛緇晊杞存棆杞紝鐒跺悗鎶婂畠縐誨姩鍒板満鏅唴鐨勫彟涓涓綅緗備負瀹炵幇榪欎釜鏁堟灉錛岄鍏堝垱寤轟竴涓棆杞煩闃礡y錛岀劧鍚庝箻浠ヤ竴涓鉤縐葷煩闃礣w錛?/p>
W = Ry * Tw 鍦ㄨ繖涓叕寮忛噷錛孯y琛ㄧず緇晊杞寸殑鏃嬭漿鐭╅樀錛孴w瀹炵幇涓栫晫鍧愭爣緋誨唴鐨勪竴嬈″鉤縐匯?font color=#800000>鐭╅樀鐨勪箻娉曚笉婊¤凍浜ゆ崲寰嬨?/font>濡傛灉灝嗚繖涓や釜鐭╅樀浠ョ浉鍙嶇殑欏哄簭鐩鎬箻錛屾晥鏋滄槸鍏堝鉤縐伙紝鐒跺悗鏃嬭漿銆?/p>
錛戯紟鍥懼儚鐨勯嗗弽澶勭悊綆楁硶
閫嗗弽澶勭悊鐨勭畻娉曞涓嬶細
璁緍錛実錛宐鍒嗗埆涓烘簮鍥懼儚鍍忕礌f錛坕錛宩錛夌殑綰紝緇匡紝钃濆垎閲忓鹼紝rr錛実g錛宐b鍒嗗埆涓哄鐞嗗悗鍍忕礌g錛坕錛宩錛夌殑綰紝緇匡紝钃濆垎閲忓箋傚垯
rr=255-r
gg=255-g
bb=255-b
錛?鍥懼儚鐨勫鉤婊戝鐞?/p>
綆楁硶濡備笅錛?br>騫蟲粦澶勭悊鏄寚灝嗘簮鍥懼儚鐨勬瘡涓涓儚绱犵殑棰滆壊鍊肩敱鍏剁浉閭籲*n涓儚绱犵殑騫沖潎鍊兼潵浠f浛銆?br>渚嬪錛屽浜?*3鐐歸樀鑰岃█錛岃鍘熷浘鍍忔煇鍍忕礌鐨勫間負f錛坕錛宩錛夛紝騫蟲粦澶勭悊鍚庤鍍忕礌鐨勫間負g錛坕錛宩錛夛紝鍒欙細
g(i,j)=(f(i,j)+f(i-1,j)+f(i+1,j)+f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)+
f(i-1,j+1)+f(i,j+1)+f(i+1,j+1))/9
娉ㄦ剰錛氳綆楁硶涓嶈兘騫蟲粦鍥懼儚杈圭晫鐨勫儚绱犮?/p>
錛? 鍥捐薄鐨勯湏铏瑰鐞?/p>
綆楁硶錛?br>瀵逛簬3*3鐐歸樀錛岄鍏堣綆楀師鍥捐薄鍍忕礌f(i,j)鐨勭孩錛岀豢錛岃摑鍒嗛噺涓庣浉鍚岃f錛坕+1錛宩錛夊強鍚屽垪f(i,j+1)鐩擱偦璞$礌鐨勬搴︼紝鍗沖樊鐨勫鉤鏂逛箣鍜岀殑騫蟲柟鏍癸紝鐒跺悗灝嗘搴﹀間綔涓哄鐞嗗悗鐨勮薄绱爂(i,j)鐨勭孩錛岀豢錛岃摑鍒嗛噺鍊箋?br>璁緍1,g1,b1鍒嗗埆涓哄師鍥捐薄璞$礌f(i,j)鐨勭孩錛岀豢錛岃摑鍒嗛噺鍊鹼紝r2,g2,b2鍒嗗埆涓虹浉鍚岃鐩擱偦璞$礌f(i+1,j)鐨勭孩錛岀豢錛岃摑鍒嗛噺鍊鹼紝r3,g3,b3鍒嗗埆涓哄悓鍒楃浉閭昏薄绱爁(i,j+1)鐨勭孩錛岀豢錛岃摑鍒嗛噺鍊鹼紝rr,gg,bb涓哄鐞嗗悗璞$礌g(i,j)鐨勭孩錛岀豢錛岃摑鍒嗛噺鍊鹼紝鍒欙細
rr1=(r1-r2)^2 rr2=(r1-r3)^2
gg1=(g1-g2)^2 gg2=(g1-g3)^2
bb1=(b1-b2)^2 bb2(b1-b3)^2
rr=2*(rr1+rr2)^0.5
gg=2*(gg1+gg2)^0.5
bb=2*(bb1+bb2)^0.5
錛?鍥捐薄鐨勯攼鍖栧鐞?/p>
閿愬寲澶勭悊鐨勭畻娉曪細
璁$畻鍘熷浘鍍忓儚绱爁(i,j)鐨勫儚绱犲間笌璇ュ儚绱犱笌鐩擱偦鍍忕礌f(i-1,j-1)鍍忕礌鍊間箣宸殑緇濆鍊煎緱鐧懼垎姣斾箣鍜岋紝浣滀負澶勭悊鍚庡浘鍍忓儚绱爂(i,j)鐨勫儚绱犲箋備緥濡傦紝璁緍1,g1,b1鍒嗗埆涓篺(i,j)鐨勭孩銆佺豢銆佽摑鍒嗛噺鍊鹼紝r2,g2,b2鍒嗗埆涓篺(i-1,j-1)鐨勭孩銆佺豢銆佽摑鍒嗛噺鍊鹼紝rr,gg,bb鍒嗗埆涓篻(i,j)鐨勭孩銆佺豢銆佽摑鍒嗛噺鍊鹼紝鍒欙細
rr=r1+0.25*abs(r1-r2)
gg=g1+0.25*abs(g1-g2)
bb=b1+0.25*abs(b1-b2)
錛? 鍥懼儚鐨勬誕闆曞鐞?/p>
綆楁硶錛?br>浣嶅浘鍥懼儚鐨勬誕闆曞鐞嗙殑綆楁硶鏄細
g(i,j)=f(i,j)-f(i-1,j)+甯告暟
寮忎腑錛実(i,j)涓哄鐞嗗悗鍥懼儚鐨勫儚绱犲鹼紝f(i,j)涓哄師鍥懼儚鐨勫儚绱犲鹼紝f(i-1,j)涓哄墠涓涓浉閭誨儚绱犵殑鍊箋傚父鏁頒竴鑸彇128錛屽嵆
rr=r1-r2+128
gg=g1-g2+128
bb=b1-b2+128
寮忎腑錛宺1,g1,b1鍒嗗埆涓哄師鍥懼儚鐨勫儚绱爁(i,j)鐨勭孩銆佺豢銆佽摑鍒嗛噺鍊鹼紱r2,g2,b2鍒嗗埆涓哄墠涓涓浉閭誨儚绱爁(i-1,j)鐨勭孩銆佺豢銆佽摑鍒嗛噺鍊鹼紝rr,gg,bb,鍒嗗埆涓哄鐞嗗悗鍥懼儚鐨勫儚绱爂(i,j)鐨勭孩銆佺豢銆佽摑鍒嗛噺鍊?
錛?鍥懼儚鐨勯暥宓屽鐞?/p>
闀跺祵澶勭悊綆楁硶濡備笅錛?br>闀跺祵澶勭悊鍚庣殑鍥懼儚姣忎竴灝忕煩闃靛唴鐨勬墍鏈夊儚绱犲奸兘鍙栨鐭╅樀鍐呭師鍥懼儚鍚勫儚绱犲間箣鍜岀殑騫沖潎鍊箋備緥濡傦紝瀵逛簬3*3鐨勫瓙鍩燂細
g(i,j)=(f(i,j)+f(i-1,j)+f(i+1,j)+f(i-1,j-1)+f(i+1,j-1)+f(i-1,j+1)+f(i,j+1)+f(i+1,j+1))/9
鍒欏彇錛?br>g(i-1,j)=g(i,j)
g(i+1,j)=g(i,j)
g錛坕,j-1錛?g(i,j)
g(i,j+1)=g(i,j)
g(i,j+1)=g(i,j)
g(i-1,j-1)=g(i,j)
g(i-1,j+1)=g(i,j)
g(i+1,j-1)=g(i,j)
g(i+1,j+1)=g(i,j)
錛?鍥懼儚鐨勭伆搴﹀鐞?/p>
褰╄壊鍥懼儚鐏板害澶勭悊鐨勭畻娉曞涓嬶細
c=tuxing.GetPixel(i,j)
r=c.R
g=c.G
b=c.B
rr=g(r 64)*64
gg=(g 64)*64
bb=(b 64)*64
錛?鍥懼儚緙╁皬澶勭悊
浠ュ潗鏍囧師鐐逛負涓績錛屽皢鍥懼儚涓儚绱犲潗鏍囩殑X鍒嗛噺鍜孻鍒嗛噺鍒嗗埆涔樹互Sx錛孲y錛屽垯鍙嬌鍥懼儚榪涜鏁翠綋鏀懼ぇ鍜岀緝灝忋傝繖鏃訛紝
X'=X*Sx
Y'=Y*Sy
褰揝x=Sy鏃訛紝浣滅浉浼煎彉鎹?
褰揝x!=Sy鏃訛紝浜х敓鍙樺艦銆?/p>
錛?鍥懼儚鐨勫鉤縐誨鐞?/p>
鍥懼儚鐨勫鉤縐誨彉鎹㈡槸灝嗗浘褰笂鐨勭偣錛坸,y)鍦▁鏂瑰悜錛堟按騫蟲柟鍚戯級鍜寉鏂瑰悜錛堝瀭鐩存柟鍚戯級
鍒嗗埆縐誨姩dx鍜宒y,鍒欏彉鎹㈠悗鐐?x',y')鍧愭爣鍊間負錛?br>x'=x+dx
y'=y+dy
錛戯紣.鍥懼儚鐨勬棆杞彉鎹?/p>
浜岀淮鍥懼儚鐨勬棆杞彉鎹㈡槸浠ュ師鐐逛負涓績錛屽皢鐐癸紙x,y錛夋棆杞琣瑙掑害鑰屽緱鍒版柊鐨勫潗鏍囷紙x',y'錛夌殑鍙樻崲縐頒負鏃嬭漿鍙樻崲銆傚叾鏁板琛ㄨ揪寮忎負錛?br>x'=x*cosa-y*sina
y'=x*sina+y*cosa
錛戯紤.浜岀淮鍥懼儚鐨勫縐板彉鎹?/p>
浜岀淮鍥懼儚瀵圭О鍙樻崲鏈変互涓嬪嚑縐嶆儏鍐?
1.浠杞翠負瀵圭О寰楀縐板彉鎹€?br>浠杞翠負瀵圭О寰楃偣(x,y)鐨勫縐扮偣(x',y')鍧愭爣涓猴細
x'=x
y'=-y
2.浠杞翠負瀵圭О寰楀縐板彉鎹€?br>浠杞翠負瀵圭О鐨勭偣錛坸,y錛夌殑瀵圭О鐐?x',y')鍧愭爣涓猴細
x'=-x
y'=y
3.浠ュ師鐐逛負瀵圭О鐨勫縐板彉鎹€?br>浠ュ師鐐逛負瀵圭О寰楃偣錛坸,y錛夌殑瀵圭О鐐癸紙x',y'錛夊潗鏍囦負錛?br>x'=-x
y'=-y
瀵瑰浘鍍忕殑姣忎竴涓儚绱犱緷鎹簩緇村浘褰㈠嚑浣曞彉鎹㈠叕寮忚繘琛岃綆楀悗錛屽湪榪涜鍥懼儚鏄劇ず錛屽垯鍙緱鍒板浘鍍忕殑鍑犱綍鍙樻崲銆?/p>
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/alin0725/archive/2007/03/28/1543860.aspx
鍥犻棶寰椾漢澶氫簡錛屾湁鏃舵垜涔熸濈儲鍜岀爺絀朵竴涓嬶紝鎬葷畻鎵句簡涓柟娉曞彲浠ュ疄鐜幫紝铏界劧鍚屼笓涓氱殑鍥懼儚杞歡錛堝PhotoShop錛夋枃瀛楁弿杈規晥鏋滅浉姣斿樊寮轟漢鎰忥紝浣嗗彲浠ュ噾鍚堝噾鍚堬紝浣滀負鐮旂┒蹇冨緱錛屽皢浠g爜璐村湪榪欓噷澶囨煡銆?/p>
鍦ㄣ奊DI+ 鍦―elphi紼嬪簭鐨勫簲鐢?-- 鍙皟鑺傜殑鏂囧瓧闃村獎鐗規晥銆嬩竴鏂囩殑鍐呭鐨勫熀紜涓婏紝瀵規枃瀛楅槾褰辨晥鏋滀唬鐮佽繘琛屼簡鏀硅繘鍜屾墿鍏咃紝鎵╁厖鐨勫姛鑳芥湁2鐐癸細涓鏄敱鍘熸潵鍙兘浜х敓榛戣壊闃村獎鎵╁厖涓轟換鎰忛鑹查槾褰憋紱浜屾槸鍙互瀵歸槾褰辮繘琛屾墿灞曘傛湁浜嗚繖2涓姛鑳斤紝鍒╃敤闃村獎鏁堟灉涔熷氨鍙互榪涜鏂囧瓧鎻忚竟浜嗭紝鎺ㄨ屽箍涔嬶紝涔熷彲瀹炵幇鍥懼儚鐨勬弿杈廣備笅闈㈡槸鍏蜂綋鐨勪唬鐮佸唴瀹癸細
// 澶囦喚鍥懼儚銆侱ata: GDI+浣嶅浘鏁版嵁錛?2浣岮RGB鏍煎紡; Dest: 澶囦喚鐩爣; Color: 闃村獎棰滆壊
procedure BackImage(Data: TBitmapData; Dest: Pointer; Color: TARGB);
asm
push esi
push edi
mov esi, [eax + 16] // esi = Data.Scan0
mov edi, edx // esi = Dest
mov edx, ecx // edx = Color & 0xffffff
and edx, 0FFFFFFh
mov ecx, [eax] // ecx = Data.Height * Data.Width
imul ecx, [eax + 4]
cld
@Loop: // for (; ecx >= 0; ecx --)
or [esi], edx
movsd // *edi++ = *esi++ & 0xff000000 | edx
loop @Loop
pop edi
pop esi
end;
// 鎵╁睍銆侱ata: GDI+浣嶅浘鏁版嵁錛?2浣岮RGB鏍煎紡; Source: 澶嶅埗鐨勬簮
// ExpMatrix: 鍗風Н鐭╅樀; MatrixSize錛氱煩闃靛ぇ灝?
procedure MakeExpand(Data: TBitmapData; Source, ExpMatrix: Pointer;
MatrixSize: LongWord);
var
Radius, mSize, rSize: LongWord;
x, y: LongWord;
Width, Height: Integer;
Matrix: Pointer;
Stride: LongWord;
asm
push esi
push edi
push ebx
mov esi, edx // esi = Source
mov edi, [eax + 16] // edi = Data.Scan0 + 3 (Alpha byte)
add edi, 3
add ecx, 3
mov Matrix, ecx // Matrix = ExpMatrix + 3 (Alpha byte)
mov ecx, MatrixSize
mov edx, ecx
dec ecx
mov ebx, [eax]
sub ebx, ecx
mov Width, ebx // Width = Data.Width - (MatrixSize - 1)
mov ebx, [eax + 4]
sub ebx, ecx
mov Height, ebx // Height = Data.Height - (MatrixSize - 1)
shr ecx, 1
mov Radius, ecx // Radius = MatrixSize / 2
mov eax, [eax + 8]
mov Stride, eax
mov mSize, eax
shl edx, 2
sub mSize, edx // mSize = Data.Stride - MatrixSize * 4
add eax, 4
imul eax, ecx
add eax, 3
add esi, eax // esi = esi + (Data.Stride * Radius + Radius * 4 + 3)
shl ecx, 3
mov rSize, ecx // rSize = Radius * 2 * 4
mov y, 0 // for (y = 0; y < Height; y ++)
@yLoop: // {
mov x, 0 // for (x = 0; x < Width; x ++)
@xLoop: // {
test [esi], 0ffh // if (*esi != 0)
jz @NextPixel // {
test [esi - 4], 0ffh
jz @001
test [esi + 4], 0ffh
jz @001
mov ebx, Stride
test [esi + ebx], 0ffh
jz @001
neg ebx
test [esi + ebx], 0ffh
jnz @NextPixel
@001:
push edi // Save(edi)
mov ebx, Matrix // ebx = Matrix
mov edx, MatrixSize // for (I = 0; I < MatrixSize; I ++)
@Loop3: // {
mov ecx, MatrixSize // for (J = 0; J <= MatrixSize; J ++)
@Loop4: // {
mov al, [ebx] // *edi = max(*ebx, *edi)
cmp al, [edi]
jb @002
mov [edi], al
@002:
add edi, 4 // edi += 4
add ebx, 4 // ebx += 4
loop @Loop4 // }
add edi, mSize // edi += mSize
dec edx
jnz @Loop3 // }
pop edi // Reset(edi)
@NextPixel: // }
add edi, 4 // edi += 4
add esi, 4 // esi += 4
inc x
mov eax, x
cmp eax, Width
jl @xLoop // }
add esi, rSize
add edi, rSize
inc y
mov eax, y
cmp eax, Height
jl @yLoop // }
pop ebx
pop edi
pop esi
end;
procedure GdipShadow(Data: TBitmapData; Buf: Pointer; Radius: LongWord);
var
Gauss: array of Integer;
Q: Double;
x, y, n, z: Integer;
p: PInteger;
begin
// 鏍規嵁鍗婂緞璁$畻楂樻柉妯$硦鐭╅樀
Q := Radius / 2;
if Q = 0 then Q := 0.1;
n := Radius shl 1 + 1;
SetLength(Gauss, n * n);
p := @Gauss[0];
z := 0;
for x := -Radius to Radius do
for y := -Radius to Radius do
begin
p^ := Round(Exp(-(x * x + y * y) / (2.0 * Q * Q)) / (2.0 * PI * Q * Q) * 1000.0);
Inc(z, p^);
Inc(p);
end;
MakeShadow(Data, Buf, Gauss, n, z);
end;
procedure GdipBorder(Data: TBitmapData; Buf: Pointer; Expand: LongWord; Color: TARGB);
var
bmp: TGpBitmap;
bg: TGpGraphics;
Data1: TBitmapData;
Size: Integer;
begin
Size := Expand shl 1 + 1;
bmp := TGpBitmap.Create(Size, Size, pf32bppARGB);
bg := TGpGraphics.Create(bmp);
try
// 鍒墮犱竴涓洿寰?Size錛屾秷闄ら敮榻垮悗鐨勫渾浣滀負鎻忚竟錛堟垨鎵╁睍錛夌殑浣嶅浘鐢葷瑪
bg.SmoothingMode := smAntiAlias;
bg.PixelOffsetMode := pmHalf;
bg.FillEllipse(Brushs[Color], 0, 0, Size, Size);
Data1 := bmp.LockBits(GpRect(0, 0, Size, Size), [imRead], pf32bppARGB);
try
// 鐢ㄤ綅鍥劇敾絎旀墿灞曞浘鍍?
MakeExpand(Data, Buf, Data1.Scan0, Size);
finally
bmp.UnlockBits(Data1);
end;
finally
bg.Free;
bmp.Free;
end;
end;
procedure DrawShadow(const g: TGpGraphics; const Bitmap: TGpBitmap;
const layoutRect: TGpRectF; ShadowSize, Distance: LongWord;
Angle: Single; Color: TARGB; Expand: LongWord);
var
dr, sr: TGpRectF;
Data: TBitmapData;
Buf: Pointer;
SaveScan0: Pointer;
begin
Data := Bitmap.LockBits(GpRect(0, 0, Bitmap.Width, Bitmap.Height),
[imRead, imWrite], pf32bppARGB);
GetMem(Buf, Data.Height * Data.Stride);
try
BackImage(Data, Buf, Color);
if Expand > ShadowSize then
Expand := ShadowSize;
if Expand <> 0 then // 澶勭悊鏂囧瓧闃村獎鎵╁睍
if Expand <> ShadowSize then
begin
SaveScan0 := Data.Scan0;
Data.Scan0 := Buf;
GdipBorder(Data, SaveScan0, Expand, Color);
Data.Scan0 := SaveScan0;
end else
GdipBorder(Data, Buf, Expand, Color);
if Expand <> ShadowSize then // 澶勭悊鏂囧瓧闃村獎鏁堟灉
GdipShadow(Data, Buf, ShadowSize - Expand);
finally
FreeMem(Buf);
Bitmap.UnlockBits(Data);
end;
sr := GpRect(0.0, 0.0, Data.Width, Data.Height);
// sr := GpRect(0.0, 0.0, layoutRect.Width + ShadowSize * 2 + 2,
// layoutRect.Height + ShadowSize * 2 + 2);
dr := GpRect(layoutRect.Point, sr.Size);
// 鏍規嵁瑙掑害璁$畻闃村獎浣嶅浘鍦ㄧ洰鏍囩敾甯冪殑鍋忕Щ閲?
Offset(dr, Cos(PI * Angle / 180) * Distance - ShadowSize - 1,
Sin(PI * Angle / 180) * Distance - ShadowSize - 1);
// 杈撳嚭闃村獎浣嶅浘鍒扮洰鏍囩敾甯?
g.DrawImage(Bitmap, dr, sr.X, sr.Y, sr.Width, sr.Height, utPixel);
end;
// 璁$畻騫惰緭鍑烘枃瀛楅槾褰辨晥鏋?
// g: 鏂囧瓧杈撳嚭鐨勭敾甯? str瑕佽緭鍑虹殑鏂囧瓧; font: 瀛椾綋; layoutRect: 闄愬畾鐨勬枃瀛楄緭鍑鴻寖鍥?
// ShadowSize: 闃村獎澶у皬; Distance: 闃村獎璺濈;
// Angle: 闃村獎杈撳嚭瑙掑害(宸﹁竟騫寵澶勪負0搴︺傞『鏃墮拡鏂瑰悜)
// ShadowAlpha: 闃村獎鏂囧瓧鐨勪笉閫忔槑搴? format: 鏂囧瓧杈撳嚭鏍煎紡
procedure DrawShadowString(const g: TGpGraphics; const str: WideString;
const font: TGpFont; const layoutRect: TGpRectF;
ShadowSize, Distance: LongWord; Angle: Single = 60;
Color: TARGB = $C0000000; Expand: LongWord = 0;
const format: TGpStringFormat = nil); overload;
var
Bmp: TGpBitmap;
Bg: TGpGraphics;
begin
// 寤虹珛閫忔槑鐨?2浣岮RGB闃村獎浣嶅浘錛屽ぇ灝忎負layoutRect闀褲佸搴?+ ShadowSize * 2 + 2
Bmp := TGpBitmap.Create(Round(layoutRect.Width + 0.5) + ShadowSize shl 1 + 2,
Round(layoutRect.Height + 0.5) + ShadowSize shl 1 + 2,
pf32bppARGB);
Bg := TGpGraphics.Create(Bmp);
try
Bg.TextRenderingHint := thAntiAlias;
// 浠olor涓嶉忔槑搴︾殑榛戣壊鐢誨埛錛屽湪ShadowSize + 1澶勮緭鍑烘枃瀛楀埌浣嶅浘鐢誨竷銆?
// 鏂逛究榛戣壊浠ュ鐨勯槾褰遍鑹叉浛鎹紙鐩存帴鐢–olor鐢伙紝妯$硦澶勭悊鍚庡緢闅劇湅錛?
Bg.DrawString(str, font, Brushs[Color and $FF000000],
GpRect(ShadowSize + 1, ShadowSize + 1,
layoutRect.Width, layoutRect.Height), format);
DrawShadow(g, Bmp, layoutRect, ShadowSize, Distance, Angle, Color, Expand);
finally
Bg.Free;
Bmp.Free;
end;
end;
// 璁$畻騫惰緭鍑烘枃瀛楅槾褰辨晥鏋滐紝闄や互杈撳嚭鐐筼rigin鏇夸唬涓婇潰甯冨眬鐭╁艦澶栵紝鍏朵粬鍙傛暟鍚屼笂
procedure DrawShadowString(const g: TGpGraphics; const str: WideString;
const font: TGpFont; const origin: TGpPointF;
ShadowSize, Distance: LongWord; Angle: Single = 60;
Color: TARGB = $C0000000; Expand: LongWord = 0;
const format: TGpStringFormat = nil); overload;
begin
DrawShadowString(g, str, font, g.MeasureString(str, font, origin, format),
ShadowSize, Distance, Angle, Color, Expand, format);
end;
涓婇潰浠g爜涓璏akeShadow榪囩▼鐨勪唬鐮佸湪銆奊DI+ 鍦―elphi紼嬪簭鐨勫簲鐢?-- 鍙皟鑺傜殑鏂囧瓧闃村獎鐗規晥銆嬩竴鏂囦腑錛屾湰鏂囨病鏈夎創鍑恒傜敱浜庝唬鐮佷腑宸茬粡鏈変簡杈冭緇嗙殑娉ㄩ噴錛屾晠涓嶅啀瑙i噴銆備笅闈㈣創鍑烘祴璇曚唬鐮侊細
procedure TextPaint(g: TGpGraphics);
var
brush: TGpLinearGradientBrush;
font: TGpFont;
fontFamily: TGpFontFamily;
r: TGpRect;
begin
fontFamily := TGpFontFamily.Create({'Times New Roman'}'鍗庢枃琛屾シ');
font := TGpFont.Create(fontFamily, 55, [fsBold], utPixel);
r := GpRect(Form1.PaintBox1.ClientRect);
brush := TGpLinearGradientBrush.Create(r, kcBlue, kcAliceBlue, 90);
g.FillRectangle(Brush, r);
DrawShadowString(g, '鏂囧瓧闃村獎鐗規晥', font, GpPoint(10, r.Height / 3), 5, 10, 60, $C0000000, 1);
DrawShadowString(g, '鏂囧瓧闃村獎鐗規晥', font, GpPoint(10, r.Height / 3), 1, 0, 60, $FFFF0000, 1);
// DrawShadowString(g, '鏂囧瓧闃村獎鐗規晥', font, GpPoint(10, r.Height / 3), 5, 12, 60, $C0000000, 1);
// DrawShadowString(g, '鏂囧瓧闃村獎鐗規晥', font, GpPoint(10, r.Height / 3), 2, 3, 60, $FFc00000, 1);
g.TextRenderingHint := thAntiAlias;
g.DrawString('鏂囧瓧闃村獎鐗規晥', font, Brushs.White, 10, r.Height / 3);
font.Free;
fontFamily.Free;
Brush.Free;
end;
浠ヤ笅鏄祴璇曚唬鐮佹晥鏋滃浘錛屽浘涓鍜屽浘浜岄兘鏄枃瀛楁弿杈癸紙1涓儚绱犵殑杈規錛夊姞闃村獎鏁堟灉錛屽叾涓浘涓娌¤繘琛岄槾褰辨墿灞曪紝鍗充笂闈㈢殑15琛岀殑浠g爜鏈鍚庝竴涓弬鏁頒負0錛屽浘浜屾槸鍔犱簡1涓儚绱犵殑闃村獎鎵╁睍鏁堟灉錛堜笂榪頒唬鐮佺殑“姝e畻”杈撳嚭錛夛細
鍥句竴
鍥句簩
鍒╃敤鏀硅繘鐨勯槾褰辨晥鏋滐紝涓嶄粎鍙疄鐜版枃瀛楁弿杈癸紝涔熷彲鏄劇ず綾諱技绔嬩綋鏂囧瓧鐨勬晥鏋滐紙鏀瑰彉鏄劇ず璺濈錛夛紝涓婇潰嫻嬭瘯浠g爜涓紝琚敞閲婄殑2鍙ヤ唬鐮佽緭鍑烘晥鏋滃涓嬶細
鍥句笁
鑷充簬鍥懼儚鐨勬弿杈癸紝浼間箮娌℃湁鏂囧瓧鐨勬弿杈規晥鏋滃ソ錛岀┒鍏跺師鍥狅紝涓昏鏄浘鍍忕殑杞粨鐪嬭搗鏉ュソ鍍忔槸鍦嗘鼎騫蟲粦鐨勶紝鍏跺疄鏈夊緢澶氬崐褰遍敮榻匡紝鍦≒hotoshop涓紝閫氳繃鍏堥夊尯鍚庢弿杈癸紝鍙兘瀵歸夊尯杈圭紭浣滀簡澶勭悊錛屾墍浠ユ晥鏋滅浉褰撳ソ錛堜笓涓氱殑杞歡錛岃偗瀹氭湁寰堝ソ鐨勭畻娉曪級銆備笅闈㈡槸鎴戝涓寮犲皬鍥劇墖浣滅殑鎻忚竟澶勭悊浠g爜鍜岃緭鍑烘晥鏋滃浘錛?/p>
// 鍥懼儚鎻忚竟
// g: 鏂囧瓧杈撳嚭鐨勭敾甯? Image: 鍥懼儚; x, y: 鍥懼儚杈撳嚭鍘熺偣
// BorderWidth: 鎬葷殑杈規瀹藉害; Color: 杈規棰滆壊;
// Expand: 杈規鎵╂暎澶у皬; Attributes: 鍥懼儚鏄劇ず灞炴?
procedure DrawImageBorder(const g: TGpGraphics; const Image: TGpImage;
x, y: Single; BorderWidth: LongWord; Color: TARGB = kcWhite;
Expand: LongWord = 0; const Attributes: TGpImageAttributes = nil);
var
Bmp: TGpBitmap;
Bg: TGpGraphics;
ColorMatrix: TColorMatrix;
Attr: TGpImageAttributes;
layoutRect: TGpRectF;
begin
Bmp := TGpBitmap.Create(Image.Width + BorderWidth shl 1 + 2,
Image.Height + BorderWidth shl 1 + 2,
pf32bppARGB);
Bg := TGpGraphics.Create(Bmp);
Attr := Attributes;
if Attr = nil then
Attr := TGpImageAttributes.Create;
try
FillChar(ColorMatrix, Sizeof(TColorMatrix), 0);
ColorMatrix[3, 3] := 1;
ColorMatrix[4, 4] := 1;
// 鍒╃敤棰滆壊鐭╅樀灝嗗浘鍍忚緭鍑轟負榛戣壊錛屼互渚胯竟妗嗛鑹叉浛鎹?
Attr.SetColorMatrix(ColorMatrix);
layoutRect := GpRect(x, y, Image.Width, Image.Height);
Bg.DrawImage(Image,
GpRect(BorderWidth + 1, BorderWidth + 1, layoutRect.Width, layoutRect.Height),
0, 0, layoutRect.Width, layoutRect.Height, utPixel, Attr);
DrawShadow(g, Bmp, layoutRect, BorderWidth, 0, 0, Color, BorderWidth - Expand);
finally
if Attributes <> nil then
Attr.ClearColorMatrix
else
Attr.Free;
Bg.Free;
Bmp.Free;
end;
end;
procedure ImagePaint(g: TGpGraphics);
var
brush: TGpLinearGradientBrush;
r: TGpRect;
Image: TGpImage;
Attributes: TGpImageAttributes;
begin
r := GpRect(Form1.PaintBox1.ClientRect);
brush := TGpLinearGradientBrush.Create(r, kcBlue, kcAliceBlue, 90);
g.FillRectangle(Brush, r);
Image := TGpImage.Create('..\..\Media\Watermark.bmp');
// 鐢誨師鍥?
g.TranslateTransform(20, r.Height / 3);
g.DrawImage(Image, 0, 0, Image.Width, Image.Height);
// 璁劇疆鍥懼儚閫忔槑鑹?
Attributes := TGpImageAttributes.Create;
Attributes.SetColorKey($ff00ff00, $ff00ff00);
// 鐢?涓儚绱犵殑鎻忚竟鍥?
g.TranslateTransform(Image.Width + 20, 0);
DrawImageBorder(g, Image, 0, 0, 2, kcWhite, 0, Attributes);
g.DrawImage(Image, GpRect(0.0, 0, Image.Width, Image.Height),
0.0, 0.0, Image.Width, Image.Height, utPixel, Attributes);
// 鐢?涓儚绱犵殑鎻忚竟鍥撅紝鍏朵腑鎵╂暎3鍍忕礌
g.TranslateTransform(Image.Width + 20, 0);
DrawImageBorder(g, Image, 0, 0, 5, kcWhite, 3, Attributes);
g.DrawImage(Image, GpRect(0.0, 0, Image.Width, Image.Height),
0.0, 0.0, Image.Width, Image.Height, utPixel, Attributes);
Attributes.Free;
Brush.Free;
Image.Free;
end;
鍥懼洓
涓婇潰鐨勬晥鏋滃浘涓紝宸﹁竟鏄師鍥撅紝涓棿鏄?涓儚绱犵殑鎻忚竟鍥撅紝鍙寵竟鏄?涓儚绱犵殑鎻忚竟鍥撅紝鍏朵腑鏈?鍍忕礌鐨勬ā緋婃墿鏁c備粠鍥句腑鍙互鐪嬪嚭錛屾垜浠?ff00ff00涓洪忔槑鑹插鐞嗗浘鍍忓洓涓鍚庯紝鍦ㄤ腑闂村拰鍙寵竟鐨勬弿杈瑰浘涓紝榪樻槸寰堟槑鏄劇殑鐪嬪埌鍥涗釜瑙掓湁寰堟貳鐨勭豢鑹詫紝姝f槸榪欎釜鍘熷洜錛屽湪涓棿鍥劇殑鍦嗚鎻忚竟鏈夋槑鏄劇殑閿嬌銆?/p>
鏈鍚庝綔鍑犵偣璇存槑錛?/p>
1銆佹湰鏂囩函灞炰笟浣欏涔犲拰鐮旂┒鐨勫績寰楋紝騫墮潪浠涔堟瀹楃殑綆楁硶錛?/p>
2銆佸洜涓烘湰鏂囦唬鐮佹槸瀛︿範鏃跺嵆鍏村啓鐨勶紝騫墮潪浼樺寲浠g爜錛岃屼笖鏄互榪囩▼褰㈠紡鍑虹幇鐨勶紝鏈夊叴瓚g殑鏈嬪弸鍙互鑷繁榪涜浼樺寲鏀硅繘錛屽啓鎴愮被鎴栬呭厓浠舵洿濂斤紙鐢變簬綆楁硶鍜屽姛鑳介兘涓嶆槸寰堝畬鍠勶紝鎵浠ユ垜娌″啓鎴愮被鐨勫艦寮忥級錛?/p>
3銆佷緥瀛愪腑鐨凣DI+鐗堟湰緋繪湰浜鴻嚜宸辨敼鍐欑殑錛屼笌緗戜笂嫻侀氱殑鐗堟湰涓嶅畬鍏ㄥ吋瀹癸紝濡傞渶浣跨敤鏈増鏈紝璇峰弬鐓с奊DI+ for VCL鍩虹 -- GDI+ 涓?VCL 銆嬩竴鏂囩殑涓嬭澆鍦板潃錛屽茍璇風暀鎰忓悗闈㈢殑淇敼璇存槑銆?/p>
4銆佸鏈夊ソ鐨勫緩璁紝璇鋒潵淇★細maozefa@hotmail.com
鏇存柊(2008-8-5 12:50)錛氬湪MakeExpand榪囩▼涓紝鏄寜鍥捐薄閫愮偣鐢ㄤ綅鍥劇敾絎旂煩闃靛~鍏呯殑錛屾瘡涓儚绱犵偣閮借榪涜鐭╅樀澶у皬鐨勬搷浣滐紝鏈灝忕殑1鍍忕礌鎵╁睍鐨勭煩闃靛ぇ灝忎負3 * 3錛屽彲瑙佹墿灞曢熷害鏄笉澶х悊鎯崇殑銆備粖澶╁浠g爜浣滀簡涓鐐逛慨鏀癸紝瀵規瘡涓薄绱犵偣閮借繘琛屼簡鍒ゆ柇錛屽鏋滄槸杈圭晫鍍忕礌錛屽垯浣滅敾絎旂煩闃靛~鍏咃紝鍚﹀垯鐩存帴璺寵繃錛岃繖鏍蜂竴鏉ワ紝閫熷害搴旇鎻愰珮涓嶅皯錛堟病浣滄祴璇曪紝澧炲姞鐨勪唬鐮佺敤綰㈣壊鏍囧嚭錛屾湁鍏磋叮鑰呭彲浠ユ祴璇曪級銆?/p>
鍘熶綔鑰呯浉鍏蟲枃绔狅細
GDI+ 鍦―elphi紼嬪簭鐨勫簲鐢?-- 鍙皟鑺傜殑鏂囧瓧闃村獎鐗規晥
GDI+鍦―elphi紼嬪簭鐨勫簲鐢?– Photoshop鑹茬浉/楗卞拰搴?鏄庡害鍔熻兘