锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍗風Н鍜屾護娉㈢殑鍖哄埆錛氬湪鏁板瓧淇″彿澶勭悊鐨勭悊璁轟腑錛屽嵎緇欏彲浠ヨ鏄竴縐嶆暟瀛﹁繍綆楋紝鑰屾護娉㈡槸涓縐嶄俊鍙峰鐞嗙殑鏂規硶銆傚嵎縐氨鍍忓姞鏉冧箻娉曚竴鏍鳳紝浣犺兘璇存護娉㈠拰鍔犳潈涔樻硶鏄竴鏍風殑鍚楋紝鏄劇劧涓嶈錛涗絾鏄護娉㈡渶緇堟槸鏈変箻娉曟潵瀹炵幇鐨勩?/p>
鑷傚簲婊ゆ嘗灝辨槸婊ゆ嘗鎵鐢ㄧ殑妯℃澘緋繪暟浼氭牴鎹浘鍍忎笉鍚屼綅緗嚜鍔ㄨ皟鏁淬?br>涓兼護娉?median filter)綆鍗曠殑璇村氨鏄細涓涓獥(window)涓績鐨勮薄绱犲煎氨鏄繖涓獥鍖呭惈鐨勮薄绱犱腑澶勪簬涓棿浣嶇疆鐨勮薄绱犲箋?br>鍧囧兼護娉?mean filter)灝辨槸涓涓獥涓績鐨勮薄绱犲煎氨鏄繖涓獥鍖呭惈鐨勮薄绱犵殑騫沖潎鍊箋?br>絀洪棿棰戠巼涓昏鏄寚鍥懼儚鐨勫鉤婊戞垨綺楃硻紼嬪害銆備竴鑸彲璁や負錛岄珮絀洪棿棰戠巼鍖哄煙縐?#8220;綺楃硻”錛屽嵆鍥懼儚鐨勪寒搴﹀煎湪灝忚寖鍥村唴鍙樺寲寰堝ぇ錛岃?#8220;騫蟲粦”鍖猴紝鍥懼儚鐨勪寒搴﹀煎彉鍖栫浉瀵硅緝灝忥紝濡傚鉤婊戠殑姘翠綋琛ㄩ潰絳夈備綆閫氭護娉富瑕佺敤浜庡姞寮哄浘鍍忎腑鐨勪綆棰戞垚鍒嗭紝鍑忓急楂橀鎴愬垎錛岃岄珮閫氭護娉㈠垯姝eソ鐩稿弽錛屽姞寮洪珮棰戠粏鑺傦紝鍑忓急浣庨緇嗚妭錛岀畝鍗曞湴璁詫細楂橀氭護娉㈠鐞嗚繃鐨勫浘鍍忔洿鍔?#8220;綺楃硻”銆傞珮閫氭護娉㈤【鍚嶆濅箟灝辨槸璁╅鐜囬珮鐨勯氳繃錛屼嬌鍥懼儚鍏鋒湁閿愬寲鏁堟灉錛涗綆閫氭護娉㈠垯鎭板ソ鐩稿弽浜嗭紝瀹冩槸浣夸綆棰戦氳繃錛屼嬌鍥懼儚鍏鋒湁騫蟲粦鐨勬晥鏋溿?/p>
•妯℃澘鐨勫畾涔?–鎵璋撴ā鏉垮氨鏄竴涓郴鏁扮煩闃?–妯℃澘澶у皬錛氱粡甯告槸濂囨暟錛屽錛?3x3 5x5 7x7 –妯℃澘緋繪暟: 鐭╅樀鐨勫厓绱?w1 w2 w3 w4 w5 w6 w7 w8 w9
絀哄煙榪囨護鍙婅繃婊ゅ櫒鐨勫畾涔夛細浣跨敤絀哄煙妯℃澘榪涜鐨勫浘鍍忓鐞嗭紝琚О涓虹┖鍩熻繃婊ゃ?br>
閽濆寲榪囨護鍣ㄧ殑涓昏鐢ㄩ?br>1錛屽澶у浘鍍忓鐞嗗墠錛屽垹鍘繪棤鐢ㄧ殑緇嗗皬緇嗚妭
2錛岃繛鎺ヤ腑鏂殑綰挎鍜屾洸綰?br>3錛岄檷浣庡櫔闊?br>4錛岄挐鍖栧鐞嗭紝鎭㈠榪囧垎閿愬寲鐨勫浘鍍?br>5錛屽浘鍍忓垱鑹猴紙闃村獎銆佽蔣杈廣佹湨鑳ф晥鏋滐級
緙虹偣錛?br>濡傛灉鍥懼儚澶勭悊鐨勭洰鐨勬槸鍘婚櫎鍣煶錛岄偅涔堬紝浣庨氭護娉㈠湪鍘婚櫎鍣煶鐨勫悓鏃朵篃閽濆寲浜嗚竟鍜屽皷閿愮殑緇嗚妭錛屼絾鏄腑鍊兼護娉㈢畻娉曠殑鐗圭偣錛氬湪鍘婚櫎鍣煶鐨勫悓鏃訛紝鍙互姣旇緝濂藉湴淇濈暀杈圭殑閿愬害鍜屽浘鍍忕殑緇嗚妭閿愬寲榪囨護鍣ㄧ殑涓昏鐢ㄩ?br>1錛屽嵃鍒蜂腑鐨勭粏寰眰嬈″己璋冦傚譏琛ユ壂鎻忋佹寕緗戝鍥懼儚鐨勯挐鍖?br>2錛岃秴澹版帰嫻嬫垚璞★紝鍒嗚鯨鐜囦綆錛岃竟緙樻ā緋婏紝閫氳繃閿愬寲鏉ユ敼鍠?br>3錛屽浘鍍忚瘑鍒腑錛屽垎鍓插墠鐨勮竟緙樻彁鍙?br>4錛岄攼鍖栧鐞嗘仮澶嶈繃搴﹂挐鍖栥佹毚鍏変笉瓚崇殑鍥懼儚
5錛屽浘鍍忓垱鑹猴紙鍙墿涓嬭竟鐣岀殑鐗規畩鍥懼儚錛?br>6錛屽皷绔鍣ㄧ殑鐩爣璇嗗埆銆佸畾浣?/p>
榪囨護鍣ㄦ晥鏋滅殑鍒嗘瀽
1錛屽父鏁版垨鍙樺寲騫崇紦鐨勫尯鍩燂紝緇撴灉涓?鎴栧緢灝忥紝鍥懼儚寰堟殫錛屼寒搴﹁闄嶄綆浜?br>2錛屽湪鏆楃殑鑳屾櫙涓婅竟緙樿澧炲己浜?br>3錛屽浘鍍忕殑鏁翠綋瀵規瘮搴﹂檷浣庝簡
4錛岃綆楁椂浼氬嚭鐜拌礋鍊鹼紝褰?澶勭悊涓哄父瑙?/p>
鍩烘湰楂橀氱┖鍩熸護娉㈢殑緙虹偣鍜岄棶棰?br>楂橀氭護娉㈠湪澧炲己浜嗚竟鐨勫悓鏃訛紝涓㈠け浜嗗浘鍍忕殑灞傛鍜屼寒搴?br>
1. 緋葷粺浣曟椂鍙戦乄M_PAINT娑堟伅錛?/p>
緋葷粺浼氬湪澶氫釜涓嶅悓鐨勬椂鏈哄彂閫乄M_PAINT娑堟伅錛氬綋絎竴嬈″垱寤轟竴涓獥鍙f椂錛屽綋鏀瑰彉紿楀彛鐨勫ぇ灝忔椂錛屽綋鎶婄獥鍙d粠鍙︿竴涓獥鍙h儗鍚庣Щ鍑烘椂錛屽綋鏈澶у寲鎴栨渶灝忓寲紿楀彛鏃訛紝絳夌瓑錛岃繖浜涘姩浣滈兘鏄敱 緋葷粺綆$悊鐨勶紝搴旂敤鍙槸琚姩鍦版帴鏀惰娑堟伅錛屽湪娑堟伅澶勭悊鍑芥暟涓繘琛岀粯鍒舵搷浣滐紱澶у鏁扮殑鏃跺欏簲鐢ㄤ篃闇瑕佽兘澶熶富鍔ㄥ紩鍙戠獥鍙d腑鐨勭粯鍒舵搷浣滐紝姣斿褰撶獥鍙f樉紺虹殑鏁版嵁鏀瑰彉鐨勬椂鍊欙紝榪欎竴鑸槸閫氳繃InvalidateRect鍜?InvalidateRgn鍑芥暟鏉ュ畬鎴愮殑銆侷nvalidateRect鍜孖nvalidateRgn鎶婃寚瀹氱殑鍖哄煙鍔犲埌紿楀彛鐨刄pdate Region涓紝褰撳簲鐢ㄧ殑娑堟伅闃熷垪娌℃湁鍏朵粬娑堟伅鏃訛紝濡傛灉紿楀彛鐨刄pdate Region涓嶄負絀烘椂錛岀郴緇熷氨浼氳嚜鍔ㄤ駭鐢焀M_PAINT娑堟伅銆?/p>
緋葷粺涓轟粈涔堜笉鍦ㄨ皟鐢↖nvalidate鏃跺彂閫乄M_PAINT娑堟伅鍛紵鍙堜負浠涔堥潪瑕佺瓑搴旂敤娑堟伅闃熷垪涓虹┖鏃舵墠鍙戦乄M_PAINT娑堟伅鍛紵榪欐槸鍥犱負緋葷粺鎶婂湪紿楀彛涓殑緇樺埗鎿嶄綔褰撲綔涓縐嶄綆浼樺厛綰х殑鎿嶄綔錛屼簬鏄敖 鍙兘鍦版帹鍚庡仛銆備笉榪囪繖鏍蜂篃鏈夊埄浜庢彁楂樼粯鍒剁殑鏁堢巼錛氫袱涓猈M_PAINT娑堟伅涔嬮棿閫氳繃InvalidateRect鍜孖nvaliateRgn浣夸箣澶辨晥鐨勫尯鍩熷氨浼氳绱姞璧鋒潵錛岀劧鍚庡湪涓涓猈M_PAINT娑堟伅涓竴嬈″緱鍒?鏇存柊錛屼笉浠呰兘閬垮厤澶氭閲嶅鍦版洿鏂板悓涓鍖哄煙錛屼篃浼樺寲浜嗗簲鐢ㄧ殑鏇存柊鎿嶄綔銆傚儚榪欑閫氳繃InvalidateRect鍜孖nvalidateRgn鏉ヤ嬌紿楀彛鍖哄煙鏃犳晥錛屼緷璧栦簬緋葷粺鍦ㄥ悎閫傜殑鏃舵満鍙戦乄M_PAINT娑堟伅鐨勬満 鍒跺疄闄呬笂鏄竴縐嶅紓姝ュ伐浣滄柟寮忥紝涔熷氨鏄錛屽湪鏃犳晥鍖栫獥鍙e尯鍩熷拰鍙戦乄M_PAINT娑堟伅涔嬮棿鏄湁寤惰繜鐨勶紱鏈夋椂鍊欒繖縐嶅歡榪熷茍涓嶆槸鎴戜滑甯屾湜鐨勶紝榪欐椂鎴戜滑褰撶劧鍙互鍦ㄦ棤鏁堝寲紿楀彛鍖哄煙鍚庡埄鐢?br>SendMessage 鍙戦佷竴鏉M_PAINT娑堟伅鏉ュ己鍒剁珛鍗抽噸鐢?br>銆愭敞瑙o細SendMessage浼歜lock鍒拌鍙戦佺殑娑堟伅琚鐞嗗畬鎵嶈繑鍥烇紝浣嗘槸WM_PAINT娑堟伅鐨勫鐞嗘椂闂村張鏄敤鎴蜂笉鍙帶鍒剁殑錛?#8220;GetMessage returns the WM_PAINT message when there are no other messages in the application's message queue, and DispatchMessage sends the message to the appropriate window procedure. ”(MSDN鍘熸枃)錛岄偅涔堜篃灝辨槸璇達紝浣犺皟鐢⊿endMessage涔嬪悗錛岃繖涓柟娉曢渶瑕佺瓑寰呭闀挎椂闂存墠鑳借繑鍥炴槸涓嶅彲鎺у埗鐨勩傛墍浠SDN涓嶆帹鑽愮敤鎴風洿鎺ュ彂閫乄M_PAINT娑堟伅錛?#8220;The WM_PAINT message is generated by the system and should not be sent by an application”銆?br>錛屼絾涓嶅浣跨敤Windows GDI涓烘垜浠彁渚涚殑鏇存柟渚垮拰寮哄ぇ鐨勫嚱鏁幫細UpdateWindow鍜孯edrawWindow銆俇pdateWindow浼氭鏌ョ獥鍙g殑Update Region錛屽綋鍏朵笉涓虹┖鏃舵墠鍙戦乄M_PAINT娑堟伅錛汻edrawWindow鍒欑粰鎴戜滑鏇村鐨勬帶鍒訛細鏄惁閲嶇敾闈炲鎴峰尯鍜岃儗鏅紝鏄惁鎬繪槸鍙戦乄M_PAINT娑堟伅鑰屼笉綆pdate Region鏄惁涓虹┖絳夈?/p>
2. BeginPaint
BeginPaint鍜學M_PAINT娑堟伅绱у瘑鐩稿叧銆傝瘯涓璇曞湪WM_PAINT澶勭悊鍑芥暟涓笉鍐橞eginPaint浼氭庢牱錛熺▼搴忎細鍍忚繘鍏ヤ簡涓涓寰幆涓鏍瘋揪鍒版儕浜虹殑CPU鍗犵敤鐜囷紝浣犱細鍙戠幇紼嬪簭鎬誨湪澶勭悊涓涓帴 涓涓殑WM_PAINT娑堟伅銆傝繖鏄洜涓哄湪閫氬父鎯呭喌涓嬶紝褰撳簲鐢ㄦ敹鍒癢M_PAINT娑堟伅鏃訛紝紿楀彛鐨刄pdate Region閮芥槸闈炵┖鐨勶紙濡傛灉涓虹┖灝變笉闇瑕佸彂閫乄M_PAINT娑堟伅浜嗭級錛孊eginPaint鐨勪竴涓綔鐢ㄥ氨鏄妸璇pdate Region緗負絀猴紝榪欐牱濡傛灉涓嶈皟鐢˙eginPaint錛岀獥鍙g殑Update Region灝變竴鐩翠笉涓虹┖錛屽鍓嶆墍榪幫紝緋葷粺灝變細涓鐩村彂閫乄M_PAINT娑堟伅銆?/p>
BeginPaint鍜學M_ERASEBKGND娑堟伅涔熸湁鍏崇郴銆傚綋紿楀彛鐨刄pdate Region琚爣蹇椾負闇瑕佹摝闄よ儗鏅椂錛孊eginPaint浼氬彂閫乄M_ERASEBKGND娑堟伅鏉ラ噸鐢昏儗鏅紝鍚屾椂鍦ㄥ叾榪斿洖淇℃伅閲屾湁涓涓爣蹇楄〃鏄庣獥鍙h儗鏅槸鍚﹁閲嶇敾榪囥傚綋鎴戜滑鐢↖nvalidateRect鍜孖nvalidateRgn鏉ユ妸鎸囧畾鍖哄煙鍔犲埌Update Region涓椂錛屽彲浠ヨ緗鍖哄煙鏄惁闇瑕佽鎿﹂櫎鑳屾櫙錛岃繖鏍蜂笅涓涓狟eginPaint灝辯煡閬撴槸鍚﹂渶瑕佸彂閫乄M_ERASEBKGND娑堟伅浜嗐?/p>
鍙﹀瑕佹敞鎰忕殑涓鐐規槸錛孊eginPaint鍙兘鍦╓M_PAINT澶勭悊鍑芥暟涓嬌鐢ㄣ?/p>


static bool IsAdmin()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principle = new WindowsPrincipal(identity);
return principle.IsInRole(WindowsBuiltInRole.Administrator);
}
static void RestartProcessElevated()
{
ProcessStartInfo info = new ProcessStartInfo();
info.UseShellExecute = true;
info.WorkingDirectory = Environment.CurrentDirectory;
info.FileName = System.Windows.Forms.Application.ExecutablePath;
info.Verb = "runas";
try
{
Process.Start(info);
}
catch (System.ComponentModel.Win32Exception ex)
{
Console.WriteLine("Exception:{0}", ex.Message);
return;
}
System.Windows.Forms.Application.Exit();
}