ãã®èšäºã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ãå€æŽããå¿ èŠæ§ã«ã€ããŠèããããããçç±ãšããã®äœæ¥ã®éçšã§çºçããåé¡ã«ã€ããŠèª¬æããŸãã
å€ãPVS-Studioã€ã³ã¿ãŒãã§ãŒã¹ã®åé¡ãšããããå€æŽããããšã«ããçç±
ãŸããå°ãæŽå²ã Visual Studioãã©ã°ã€ã³ã«ã¯ãã¢ãã©ã€ã¶ãŒã®4çªç®ã®ããŒãžã§ã³ããå¥ã®PVS-StudioãŠã£ã³ããŠã衚瀺ãããŸããã 以åã®ããŒãžã§ã³ã§ã¯ãæšæºã®ãšã©ãŒãªã¹ããŠã£ã³ããŠã䜿çšããŠèšºæã¡ãã»ãŒãžã衚瀺ããŠããŸãããããã®ãŠã£ã³ããŠã®æ©èœã¯ããã«èŠä»¶ãè¶ ããŸããã ç¬èªã®ãã£ã«ã¿ãŒãã³ã³ããã¹ãã¡ãã¥ãŒããã¿ã³ãªã©ãè¿œå ã§ããªãããšã«å ããŠãPVS-Studioã¡ãã»ãŒãžçšã«ç¬èªã®ãŠã£ã³ããŠãå®è£ ããããã«ä¿ããäž»ãªçç±ã¯ããšã©ãŒãªã¹ãã®ããã©ãŒãã³ã¹ã§ããã ãã®äžã«å°ãªããšãæ°åã®ã¡ãã»ãŒãžãèšé²ãããšããããæ±ãããšãäžå¯èœã«ãªããŸãã-ã¹ã¯ããŒã«ããããšããŠãã¹ã¿ãžãªãããªãŒãºããŸããã
ãã¡ãããäœåãã®ã¡ãã»ãŒãžãçæããã¢ãã©ã€ã¶ãŒã¯æªãã¢ãã©ã€ã¶ãŒã§ãã ãã ããæåã®èšºæã¯C ++ããã°ã©ã ã64ããããã©ãããã©ãŒã ã«ç§»æ€ããéã®ãšã©ãŒã§ããããã®æ§è³ªäžãç¹ã«å®éã®å€§èŠæš¡ãããžã§ã¯ãã§ã¯ãã®ãããªãšã©ãŒãéåžžã«å€ããªãå¯èœæ§ãããããšã«çæããŠãã ããã ã²ããã«ãç§ãã¡ã®ãã¢ã³ãã¬ã³ãŒããã¯ã250,000ã¡ãã»ãŒãžã®ã¬ããŒãã ã£ããšèšããŸãïŒ ãŠãŒã¶ãŒãããã«å®å¿ãããã-PVS-Studioã®ææ°ããŒãžã§ã³ã¯éåžžãããèš±å¯ããŸãããç¹ã«çŸåšããšã©ãŒã®ãéèŠåºŠã¬ãã«ãã倱æããæäœïŒæ¹æ³è«ã®æ çµã¿å ã§äžå¯é¿çã«çºçããïŒãç°¡åã«æå¶ãŸãã¯ç¡å¹ã«ããããŸããŸãªæ¹æ³ãªã©ã®æŠå¿µããããŸãéç解æïŒã ãã ãã2010幎ã«ã¯ãããããã¹ãŠããŸã ååšããŠããªãã£ããããã€ã³ã¿ãŒãã§ã€ã¹ã®ããã¬ãŒããã¯ãããŸã§ä»¥äžã«é¢é£æ§ããããŸããã
å¥ã®ãŠã£ã³ããŠãåãããã©ã°ã€ã³ã®æåã®ããŒãžã§ã³ã¯ãVisual StudioããŒãžã§ã³2005ããã³2008ããµããŒãããŠããŸãããææ°ã®Visual Studioãåæ¢ãããæšæºã®ãšã©ãŒãªã¹ãã«å€æ°ã®ã¡ãã»ãŒãžã衚瀺ããåé¡ã¯ãã§ã«èµ·ãããããŸãé¢é£ããŠããŸãããããããå¥ã®ãåºåãŠã£ã³ããŠãã®å©ç¹ã¯äŸç¶ãšããŠæããã§ãã ããã§ã¯ãçµã¿èŸŒã¿ã®Visual Studio C ++ã¢ãã©ã€ã¶ãŒãšã®é¡äŒŒç¹ãæãã®ã¯é¢çœãã§ã-äžå®ã®æéïŒããŒãžã§ã³2010-2012ã®ããã§ãããééã£ãŠããå¯èœæ§ããããŸãïŒããã®ã¢ãã©ã€ã¶ãŒã¯ç¬èªã®åå¥ã®åºåãŠã£ã³ããŠã䜿çšããŠäœæ¥çµæã衚瀺ããŸããã ãã ããæè¿ã®ããŒãžã§ã³ã§ã¯ãVisual Studioã¯æšæºã®ãšã©ãŒãªã¹ããŠã£ã³ããŠã«çµæã衚瀺ããããã«ãªããŸããã ç§ãã¡ã®æèŠã§ã¯ãVisual Studioã®éçºè ããããè¡ã£ãçç±ã«ã€ããŠã¯ãæ°ãããŠã£ã³ããŠã«ã€ããŠèª¬æããææããç¥ããããŸãã
åè¿°ããããã«ãPVS-StudioãŠã£ã³ããŠã®æåã®ããŒãžã§ã³ã¯ãVisual Studioã®2005ããã³2008ããŒãžã§ã³çšã«äœæãããŸããã ãããã£ãŠããŠã£ã³ããŠã®åæèšèšãéçºãããšãã¯ããããã®ããŒãžã§ã³ã®IDEããã®æšæºãšã©ãŒãªã¹ãã®èšèšã«çŠç¹ãåœãŠãŸããã ããã¯ãåºæ¬çã«åœææ¡çšããã¢ã€ã³ã³ã®ã¹ã¿ã€ã«ã説æããŠããŸãã Visual Studioã®ææ°ããŒãžã§ã³ã§ã¯ããŠã£ã³ããŠããã¹ãŠã®æ°ããã«ã©ãŒããŒãããµããŒãããŠããŸãããããã®äžã®ã¢ã€ã³ã³ã¯åœæã®ãŸãŸã§ããã ããã¯ããåã¹ã¿ã€ã«ãããåã®ã€ã³ã¿ãŒãã§ã€ã¹ã®äž»èŠã³ã³ããŒãã³ãã®å€èŠ³ã§ãã
å³1-Visual Studio 2015ã®å€ãPVS-Studioã€ã³ã¿ãŒãã§ã€ã¹ïŒåºåãŠã£ã³ããŠãšã¡ã€ã³ã¡ãã¥ãŒïŒ
çŽç²ã«ã審çŸçãªãããšã«å ããŠãç§ãã¡ã®ã€ã³ã¿ãŒãã§ãŒã¹ã®åé¡ã¯äœã§ããïŒ ããããç§ãã¡ã®äž»ãªåé¡ããŸãã¯ãããããŠãŒã¶ãŒã«äžäŸ¿ãããããåé¡ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã®çŽèŠ³æ§ã§ãã ã³ã³ããã¹ãã¡ãã¥ãŒã§èª€æ€ç¥ãããŒã¯ããããã¡ãã»ãŒãžããã®éèŠåºŠã«å¿ããŠåºå¥ããããããããªäžèŠåºæ¬çãªæ©èœã§ãããå€ãã®å ŽåããŠãŒã¶ãŒã«ã¯æããã§ã¯ãªãã質åãå¯ããããŸããã ãŠãŒã¶ãŒãã¬ãã«3ã®ã¡ãã»ãŒãžãæããå±éºãã§ãããšèããããšã¯çãããããŸããã ãã1ã€ã®åé¡ã¯ãäžè¬çãªãããé«ããã§ããã©ãã«ãå€ããããçç¥åœ¢ããã¿ã³ããããã«ãããäœããèŠã€ããã®ãå°é£ã§ãã
æ°ããã€ã³ã¿ãŒãã§ãŒã¹ã§ã¯ããããã®åé¡ã解決ããããšããŸããããã©ãã ãã®ããšãè¡ã£ãã®ããããã«èª¿ã¹ãããšãã§ããŸãã
æ°ããã¡ã€ã³ãŠã£ã³ããŠã®ãã¶ã€ã³
ã³ãŒããæžãå§ããåã«ãæ°ããã€ã³ã¿ãŒãã§ã€ã¹ã®ã³ã³ã»ãããäœæããã¿ã¹ã¯ãæã€ããã®ãã¶ã€ããŒã«é ŒããŸããã åè¿°ããããã«ããŠã£ã³ããŠã«ã¯æšæºã®ãšã©ãŒãªã¹ãã®æŠå¿µãç¹°ãè¿ãããŠããããããã®äžå¿éšåã¯å€å žçãªã°ãªãããã€ãŸãåãšè¡ã®ããããŒãã«ã§ããã ç§ãã¡ã¯ããå€å žçãªãå ¬åŒãå®éšããæŸæ£ããããšããã®ã§ãããã«ããããªãºã ãæµè¡ããŠãããããVisual Studioèªäœã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®ãããã®åŸåã«å·Šå³ãããŸãã æ°ãããã€ã³ã¹ãã¬ãŒã·ã§ã³ããšããŠãçµã¿èŸŒã¿ã®C ++ã¢ãã©ã€ã¶ãŒã®çµæã®éç¥ãŠã£ã³ããŠãšåºåãŠã£ã³ããŠã§ããVisual Studioã®èŠçŽ ã䜿çšããŠåè©Šè¡ããããšã«ããŸããã
å³2-çµã¿èŸŒã¿ã®éçåæãŠã£ã³ããŠïŒVisual Studio 2012ïŒããã³éç¥ãŠã£ã³ããŠïŒVisual Studio 2013ïŒ
åçãããããããã«ãäž¡æ¹ã®ãŠã£ã³ããŠã¯å¯èœãªéãæå°éã«æããããŠããŸããã¡ãã»ãŒãžããã¹ããšèå¥åïŒã³ãŒããŸãã¯ã«ã©ãŒããŒã«ãŒïŒã®ã¿ãå«ãŸããŠããŸãã å·ŠåŽã®ãŠã£ã³ããŠã«ã¯ãæ€çŽ¢/ãã£ã«ã¿ãªã³ã°çšã®ãã£ãŒã«ãããããŸãã ãŸãããšã©ãŒãªã¹ããšã¯ç°ãªããäž¡æ¹ã®ãŠã£ã³ããŠã¯æ°Žå¹³æ¹åã§ã¯ãªãåçŽæ¹åã«é 眮ãããŠããŸãã
ãããŠãããã§ç§ã¯ãã§ã«äžã§è¿°ã¹ããã®ã«æ»ããããšæããŸã-2015幎ã®ã¹ã¿ãžãªã§ãMicrosoftéçºè ã¯äœããã®çç±ã§éç解æã®ããã®ããã¡ãã·ã§ããã«ãªãæ°ããåçŽãŠã£ã³ããŠãæŸæ£ãïŒå·Šã®åçïŒããå€ãè¯ãããšã©ãŒãªã¹ããæ¯æããŸããã ãªãããããã®ã§ããïŒ ç§ã®æèŠã§ã¯ããã®æ°ãããŠã£ã³ããŠãç¬èªã«äœ¿çšããçµéšãã-ãã®ãŠã£ã³ããŠã¯äœ¿çšããã®ãäžäŸ¿ã ã£ãããã§ãã åçŽã®è¡šã§ã¯ãç»é¢ã«è¡šç€ºãããã¡ãã»ãŒãžã¯ã»ãšãã©ãªããåºæºïŒããšãã°ãã³ãŒããŸãã¯ãã¡ã€ã«ïŒã§äžŠã¹æ¿ããããšã¯ã§ããŸããã§ãããã¡ãã»ãŒãžã®ããã«ãŒãããéããããå Žåãç»é¢å šäœãå æããããšããããŸããã
ããŸããŸãªèšèšãªãã·ã§ã³ã§ãéã³ããŸããããããããåãçµè«ã«éããŸãã-ã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžïŒããšãã°ãã³ã³ãã€ã©ãŒã®èŠåãªã©ïŒã¯ãå€å žçãªæ°Žå¹³ã®ãã°ãªãããã§è¡šç€ºããã³åæããæ¹ã䟿å©ã§ãã ã¯ããéç¥ã€ã³ã¿ãŒãã§ãŒã¹ïŒå³ã®å³åŽïŒã¯ã泚æãå¿ èŠãª2ã€ãŸãã¯3ã€ã®ã¡ãã»ãŒãžã衚瀺ããå¿ èŠãããå Žåã«äŸ¿å©ã§ããããŠãŒã¶ãŒãæ°åïŒå Žåã«ãã£ãŠã¯æ°çŸãŸãã¯æ°åïŒã®ã¡ãã»ãŒãžãåŠçããå¿ èŠãããå Žåã¯ãè¡šã®å©ç¹ãæããã«ãªããŸãã ãã¡ãããåæèšå®ã®åŸãéçºè ã¯éåžžãæ°ããã³ãŒãã§ããã€ãã®ã¡ãã»ãŒãžãåæã«åŠçããå¿ èŠããããŸãããã¡ãããéçã¢ãã©ã€ã¶ãŒãæ£ãã䜿çšãããŠããå Žåãã€ãŸã å®æçã«ã ãã ããåæã»ããã¢ãã段éãåæ§ã«éèŠã§ãããå€ãã®å Žåãã¢ãã©ã€ã¶ã®ãããªã䜿çšã®æåã¯ããã®å®è£ ã®æ£ç¢ºãã«äŸåããŸãã ããã§ããéç¥ãŠã£ã³ããŠã§ã¯ãã¡ãã»ãŒãžã®ãéèŠæ§ããèŠèŠçã«åºå¥ãããšããèå³æ·±ãã¢ã€ãã¢ãåŸãããŸãã-ã«ã©ãŒããŒã®å©ããåããŠã
äžè¬çãªæ¹åæ§ã決å®ããåŸãã€ã³ã¿ãŒãã§ã€ã¹ã®æè¡çåºç€ãéžæããå¿ èŠããããŸããã 以åã®ããŒãžã§ã³ã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ããå€ãè¯ããWindowsãã©ãŒã ã䜿çšããŠããŸãããããã¯ãVisual Studio 2005ããã³2008ããµããŒãããå¿ èŠãããããã§ããVisualStudioãã©ã°ã€ã³ã¯CïŒã§éçºãããŠããããšãèãããšãVisual Studioã¯ã¯ãã¹ãã©ãããã©ãŒã ã§ã¯ãªããããããããèªäœãäž»ãªçç±ã§ãVisual Studioã¯WPFãã¯ãããžã䜿çšããŠããŸããæŽæ°ãããã€ã³ã¿ãŒãã§ã€ã¹ã«åãWPFã䜿çšããã®ãæãçã«ããªã£ãŠããããã§ãã ããã«ããããããããã©ã°ã€ã³ã®å éšããžãã¯å šäœãšããã«ãã£ãŠäœ¿çšãããããŒã¿æ§é ãã€ã³ã¿ãŒãã§ãŒã¹ã«çŽæ¥ãçµã³ä»ãããããŠããªãå Žåã§ããçŸåšã®ããŒãžã§ã³ã§ã¯ãå粧åã®ä¿®åŸ©ããæåã«å®è¡ããããšã決å®ããŸããã æŽæ°ããããã¶ã€ã³ã«åŸã£ãŠçŸåšã®ã€ã³ã¿ãŒãã§ã€ã¹ãåã«ãåæç»ãããåºç€ãšãªããã¹ãŠã®ã³ã³ããŒãã³ããå€æŽããã«æ®ããŸãã æ®å¿µãªãããçŸå®ã®äžçã¯ãã®æ¡ä»¶ã決å®ããæã«ã¯ããªãããããããšãšããªããããå¿ èŠãããããšãåªå ããªããã°ãªããŸããã ããã«ããã®ãããªå粧åã®ä¿®çã¯ãéåžžã«å°ãªãåŽåã§çæéã§è¡ãããšãã§ããŸãã
WinFormsã®åºæ¬æ©èœããã§ã«èŠéããå§ããŠããããšãèªããªããã°ãªããŸãã-ãã®ãããªäžèŠå°ããªãå粧åãã®ä¿®æ£ã§ãããã³ãŒãã«ããã€ãã®ãã¯ã©ã³ããã®å®è£ ãå¿ èŠã§ãã-ãŠãŒã¶ãŒã«ã¯ç®ç«ããªãããã€ã³ã¿ãŒãã§ãŒã¹ã®ãããªããµããŒããšéçºããã§ã«è€éã«ããŸãã ããšãã°ãããŒã«ã¹ããªããããã«ã«è¡šç€ºããããšãã«ãæ°ããã¬ãã«ãã¿ã³ïŒã«ã©ãŒããŒïŒããããããå¿ èŠããããŸããã WinFormsèªäœã®æšæºããŒã«ã¹ããªããã¯ããã®èŠçŽ ã®ã¬ã³ããªã³ã°ãæ åœããŸããããŠãŒã¶ãŒã³ã³ãããŒã«ããã¹ãããå Žåããã®ã³ã³ãããŒã«ã®ã¬ã³ããªã³ã°ããã®äžã«ã·ããããå¿ èŠããããŸãïŒããã¯ãã«ã©ãŒã¹ããŒã ããµããŒãããäžã§ç¹ã«éèŠã§ããïŒã ãŸããWinFormsã䜿çšãããšãããªãå€é¢šãªVS SDK GetVSSysColorExã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠã«ã©ãŒã¹ããŒã ããµããŒãããã³ã³ããŒãã³ããåå¥ã«ãè²ä»ããããã«ã©ãŒããŒããåãæ¿ããç¬éããã£ããããå¿ èŠããããŸãã WPFã³ã³ããŒãã³ãã®å ŽåãVisual Studioã¯ãXAMLããŒã¯ã¢ããã§çŽæ¥ãåçãªãœãŒã¹ãéããŠè²ãéžæããããã®ãã䟿å©ãªã¡ã«ããºã ãæäŸããŸãã
ãã®çµæãPVS-Studioã€ã³ã¿ãŒãã§ã€ã¹ã®æ¬¡ã®ïŒçŸåšã®æŽæ°åŸã®ïŒããŒãžã§ã³ã¯å®å šã«WPFã«åºã¥ããŠãããšèªä¿¡ãæã£ãŠèšããŸãã ããŠãç§ãã¡ã®ç®æšã¯ã以åã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ã€ãã¬ãŒã·ã§ã³ãšåæ§ã«ãæšæºã®Visual StudioãŠã£ã³ããŠãšã®é¢é£ã§ãä¿¡é Œæ§ããç¶æããããšã§ããã çµæã¯æ¬¡ã®ãšããã§ãã
å³3-æŽæ°ãããPVS-Studioã€ã³ã¿ãŒãã§ã€ã¹ïŒåºåãŠã£ã³ããŠãšã¡ã€ã³ã¡ãã¥ãŒïŒ
ã¡ãã¥ãŒé ç®ãã¢ã€ã³ã³ãçæ
å€ãPVS-Studioãã©ã°ã€ã³ã¢ã€ã³ã³ã¯ãçæ³ãšã¯ã»ã©é ãããŸãã¯Visual Studioã®æšæºã®ãããŒãããšã¯ã»ã©é ãããããããã眮ãæããããšã決å®ãããŸããã æ°ããã¢ã€ã³ã³ã®äž»ãªèŠä»¶ã¯ãåäžã®ã¹ã¿ã€ã«ãžã®é©åæ§ãšãã¹ãŠã®Visual Studioã«ã©ãŒã¹ããŒã ã«å¯Ÿããåªããã³ã³ãã©ã¹ãã§ããã
äžé£ã®ã¢ã€ã³ã³ã決å®ããéçºãéå§ããŸããã æåã«ééããåé¡ã¯ãå¥åŠãªããšã«ãVisual Studioã®ã¡ã€ã³ã¡ãã¥ãŒã«ã¢ã€ã³ã³ãçŽæ¥è¡šç€ºããããšã§ããã ãåŸ ã£ãŠãPVS-Studioã®æåã®ããŒãžã§ã³ããå§ããŠããã®ã¡ãã¥ãŒã«ãã§ã«ã¢ã€ã³ã³ã衚瀺ããŠããŸãïŒããšèšããŸãã å®éãããã¯ããã§ããã以åã«äœ¿çšããæ¹æ³ã¯ç§ãã¡ã®ç®çã«ã¯é©ããŠããŸããã§ããã ã¢ã€ã³ã³ãèšå®ããããã«ãåäžã®Visual Studioæ¡åŒµã¡ã«ããºã ã䜿çšããŠã¡ãã¥ãŒé ç®ïŒvsctãã¡ã€ã«ïŒãäœæããããšãæ確ã«ããŸãïŒè©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ïŒã ãã®ãªãã·ã§ã³ã§ç§ãã¡ã«åããªãã£ãã®ã¯äœã§ããïŒ ãŸã第äžã«ãã¢ã€ã³ã³ã¯äžåºŠã ãèšå®ã§ããŸã-ãã©ã°ã€ã³ãã¹ã¿ãžãªã«ãã£ãŠããŒãããããšãã æšæºã®ã¹ã¿ãžãªã¢ã€ã³ã³ã®åäœãã·ãã¥ã¬ãŒããããã£ãã®ã§ãã éžæããã«ã©ãŒã¹ããŒã ã«å¿ããŠããããåæç»ããŸãïŒåŸã§å€æããããã«ããã®èŠä»¶ã¯åé·ã§ãã-ã¹ã¿ãžãªã¯ããèªäœãè¡ãæ¹æ³ãç¥ã£ãŠããŸãïŒã 第äºã«ãvsctãã¡ã€ã«ã¯ãã©ã®ããã«ã¢ã€ã³ã³ã®ç»åã§ã¢ã«ãã¡ãã£ãã«ã䜿çšããããç¥ããªããããèŠãç®ãéåžžã«æªããªããŸãã
質åãçºçããŸããïŒã¡ãã¥ãŒé ç®ã¢ã€ã³ã³ã®ç»åãããã°ã©ã ã§èšå®ããã«ã¯ã©ãããã°ããã§ããïŒãããè¡ãããšãå¯èœã§ããïŒ é·ãæ€çŽ¢ã®åŸãç§ã¯ãããããŸãè¡ãããšãã§ãããµãŒãããŒãã£ã®Visual Studioæ¡åŒµæ©èœãèŠã€ããããšãã§ããŸããã ãã®ãœãŒã¹ã³ãŒãã®èª¿æ»ã«ãããäžèšã®è³ªåã«å¯ŸããçããèŠã€ããããšãã§ããŸããã ãã¹ãŠãéåžžã«ã·ã³ãã«ã§ããããšãå€æããŸããã
var commandBars = (CommandBars)DTE.CommandBars; var menuBar = commandBars[menuBarKey]; var pvsBar = menuBar.Controls["PVS-Studio"] as CommandBarPopup; ... cmdBtnControl.Picture = ImageHelper.BitmapToStdPicture(bmp);
ãŸãããŠãŒã¶ãŒãå¿ èŠãªå ŽåïŒããã³ãã®çç±ã¯ïŒïŒãPVS-Studioã®ã¡ãã¥ãŒé ç®ã®ååãå€æŽãããå Žåããã®ãããªæ¹æ³ã¯ãå£ããããšããæžå¿µããããŸããã ãããããããã®ææã¯ç¡é§ã§ãã-commandBarãªããžã§ã¯ãã®å éšåã¯å€ãããŸããã
ã¢ã€ã³ã³ã®åç衚瀺ã®åé¡ã解決ããåŸãã¢ã¯ãã£ããªVisual StudioããŒãããéžæãããè²ã§ã¢ãã¯ãã¢ã€ã³ã³ãå¡ãã€ã¶ãã¢ã«ãŽãªãºã ãå®è£ ããŸããã ãã©ã°ã€ã³ãªãœãŒã¹ã®ãã¹ãŠã®ã¢ã€ã³ã³ãçœã«å転ããç»åã®åãã¯ã»ã«ã®è²ã«å¿ èŠãªè²ãæããç°¡åãªå€æã¢ã«ãŽãªãºã ãäœæããŸããã
public static void Colorize(ref Bitmap img, Color color) { for (int x = 0; x < img.Width; x++) { for (int y = 0; y < img.Height; y++) { // // var pixel = img.GetPixel(x, y); var r = (byte)(((float)pixel.R) * ((float)color.R / 255f)); var g = (byte)(((float)pixel.G) * ((float)color.G / 255f)); var b = (byte)(((float)pixel.B) * ((float)color.B / 255f)); img.SetPixel(x, y, Color.FromArgb(pixel.A, r, g, b)); } } }
åºåã§ã¯ã次ã®çµæãåŸãããŸããã
å³4-ã¢ã€ã³ã³ã®è²ä»ãã¢ã«ãŽãªãºã ã®æäœã®äŸã
ããããäºæããªãåäœãèŠã€ãããŸãã-ããšãã°ãVisual Studioãã¶ã€ã³ã®ãèµ€ãããŒããéžæãããå Žåãã¢ã€ã³ã³ã¯æ£ãã衚瀺ãããŸããã æ£ããããã©ã€ããã¹ããŒã ã§è¡šç€ºãããŠããŸããã ãæããã¹ããŒã ã§ã¯ãã¢ã€ã³ã³ã¯é»ã®ãŸãŸã§ãäºæ³ã©ããçœã«ãªããŸããã§ããã ã¹ã¿ãžãªèªäœããéžæãããé è²ã®èæ¯ã®ãæãããã«å¿ããŠç»åã®ç¹å®ã®è²ãå転ã§ããããšãå€æããŸãã-ã¢ã€ã³ã³ã®è²ä»ãã®ä»¥åã®å®éšã¯ç¡é§ã§ããããšãå€æããŸããã ã¹ã¿ãžãªã¯ãã¹ãŠãè¡ã£ãŠãããŸããã ããã«ãããããããã¢ã«ãã¡ãã£ãã«ã®åé¡ã®ãããäžèšã®ã¢ã€ã³ã³ãããã°ã©ã ã§èšå®ããæ¹æ³ãæ®ãããšã«ããŸããã
åæ§ã«ãPVS-Studioã®ã¡ãã»ãŒãžåºåãŠã£ã³ããŠã§ããã¹ãŠã®ã¢ã€ã³ã³ãšã¢ã€ã³ã³ãåãã»ããããé©åãªãã®ã«å€æŽããŸããã ãã ããVisual Studioã®é è²ã«å¿ããŠã¡ãã¥ãŒã®ã¢ã€ã³ã³ã®è²ãèªåçã«å€æŽãããå Žåããã©ã°ã€ã³ãŠã£ã³ããŠã®ã¢ã€ã³ã³ã¯ãã¹ãŠã®é è²ã«å¯ŸããŠå ã®åœ¢åŒã®ãŸãŸã«ãªããŸãã
å³5-Visual Studioã®æãé è²ã§ã¢ã€ã³ã³ã衚瀺ããéã®åé¡ã
Visual Studio SDKã䜿çšããŠãã¢ã€ã³ã³ã«ã¹ã¿ãžãªã«ã©ãŒåã¢ã«ãŽãªãºã ãé©çšã§ãããã©ããçåã«æããŸããã çµæã¯ç§ãã¡ãé·ãåŸ ãããŸããã§ããã æ°åæ€çŽ¢ããåŸã Microsoft.VisualStudio.PlatformUIåå空éã®ImageThemingUtilitiesã¯ã©ã¹ã®GetThemedBitmapã¡ãœããã«åºäŒããŸããã 圌ã¯ç§ãã¡ãå¿ èŠãªããšãæ£ç¢ºã«ãã£ãïŒ
å³6-æãVisual StudioããŒãã®ãŠã£ã³ããŠã§ã®ã¢ã€ã³ã³ã®æ£ãã衚瀺ã
ã¢ã€ã³ã³ãå€æŽãããšãã«çºçããå¥ã®åé¡ã¯ã100ïŒ ä»¥å€ã®DPIã§ã®ãŒããã§ããã ããã¯ããã¹ãŠã®ã¢ã€ã³ã³ã®ãµã€ãºã16x16ãã¯ã»ã«ã ã£ãããã«çºçããŸããã æåã¯64x64ã¢ã€ã³ã³ã䜿çšããŠããã®åé¡ãéšåçã«ç¡å¹ã«ããŸããã ãã®å ŽåãVisualStudioã¯ããããèªåçã«ç®çã®ãµã€ãºã«å§çž®ããŸããã ãããããã®å®æœåœ¢æ ã§ã¯ããã¹ãŠãéåžžã«æ»ããã§ã¯ãªãããšãå€æããã çŸåšãDPIã100ïŒ ã®å Žåããããã«ãŒãããŠããŸãã ãã®çµæã100ïŒ ä»¥å€ã®DPIã§ã¯æã蚱容ã§ããçµæãåŸããã100ïŒ DPIã§ã¯ãŒãããå®è³ªçã«ç®ç«ããªãã£ããããæ£ç¢ºã«64x64ã®ç»åã䜿çšããããšã決å®ãããŸããã
ãŸããDPIã115ïŒ ã®å Žåãã¢ã€ã³ã³ã®å³ç«¯ãæ°ãã¯ã»ã«ååããŠããããšãããããŸããã ããã°ã©ã ã§æ°ãã¯ã»ã«ãå³ã«è¿œå ããããšããïŒç»åã®ãµã€ãºã64x68ã«ãªãããã«ïŒè©Šã¿ã倱æããŸããã Visual Studioã®ã¢ã€ã³ã³ã¯å§çž®ãããŠæ£æ¹åœ¢ã®ã¢ã¹ãã¯ãæ¯ã«æ»ãããããªãã³ã°ã¯åã¡ãŸãããããã©ãŒã¯æã å¢å ããŸããã æçµçã«ãåã¢ã€ã³ã³ã«ããã€ãã®ç©ºçœãã¯ã»ã«ãè¿œå ãããµã€ãºã64x64ã®ãŸãŸã«ããŸããã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãæå°éã®ãŒããïŒã»ãšãã©ç®ã«èŠããªãïŒãæäŸããã¢ã€ã³ã³ã®å³åŽã®å²ç€Œãé€å€ããŸããã
ãããã«
äžèŠéèŠãªå€éšã®å€æŽã«ãããããããPVS-Studioã®ãå éšãã€ã³ã¿ãŒãã§ãŒã¹ã¯å®éã«ã¯åããŸãŸã§ããã å€ããŠãŒã¶ãŒã«ãšã£ãŠã¯æ°ããã€ã³ã¿ãŒãã§ã€ã¹ãããªãã¿ãããããŸãŸã§ãããæ°ãããŠãŒã¶ãŒã«ãšã£ãŠã¯ããçŽæçã§æ¥œãããã®ã«ãªãããšãé¡ã£ãŠããŸãã ãããŠãã¡ãããããã¯ãã¹ãŠã®ãŠãŒã¶ãŒã®ç®ã«ã¯ãããããã«ãªããŸãã ç§ãã¡ãäœãšããããã©ããã¯ããªãã®å€æ次第ã§ãã
ãã®èšäºãè±èªåã®èŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒIvan KishchenkoãPaul Eremeevã PVS-StudioãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãæŽæ°ãããšãã«çŽé¢ããåé¡ ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã