Linux
ææªã®ç¶æ¿
Windowsã¯ãã©ã³ãã®ã©ã¹ã¿ã©ã€ãºãäžååã§ãLinuxã¯ããã«æªãã§ãã ç§ãèŠããã¹ãŠã®Linuxã·ã¹ãã ã¯ãDavid TurnerãRobert Wilhelmãããã³Werner Lembergã«ããFreeType [10]ã䜿çšããŠããŸãã ããã¯åªããã©ã€ãã©ãªã§ãããæ®å¿µãªãããã®äœ¿çšæ¹æ³ãæåãšåŒã¶ããšã¯ã§ããŸããã å žåçãªLinuxã¹ã¯ãªãŒã³ã·ã§ããã¯æ¬¡ã®ããã«ãªããŸãã
![](https://habrastorage.org/getpro/habr/post_images/805/d32/d59/805d32d595eaa5e99fb0cfa74a5202ee.png)
å®å šãªã¹ã¯ãªãŒã³ã·ã§ããã¯æ¬¡ã®ãšããã§ãã
åç §
åé¡ã¯ããã«ç®ç«ã¡ãŸã-æ»ãããªçµæãšããŠåœ¢æãããäžžãè§ã®é»ãæç¹ã äžè¬çã«ãæãã®ã¹ãããŒã¯ã¯åçŽã®ã¹ãããŒã¯ãããéãèŠãããããçµæãšããŠãæ±ããã®å°è±¡ãäžããŸãã FreeTypeãšLinuxã¯ClearTypeã«äŒŒããµããã¯ã»ã«ã©ã¹ã¿ã©ã€ãºã䜿çšã§ãããšäž»åŒµãããããããŸããããç§ã«ãšã£ãŠããã«ã¯é¡èãªå©ç¹ã¯ãããŸããã
![](https://habrastorage.org/getpro/habr/post_images/740/62e/c78/74062ec786c746a0f733f6626375e618.png)
ãWãããvãããyããèŠãŠãã ãããåé¡ã¯åºæ¬çã«åãã§ããã£ã©ã¯ã¿ãŒã¯æ±ããŠããŸãã ã©ã¹ã¿ã©ã€ãºã®ããã»ã¹ã§ã¬ã³ãè£æ£ã䜿çšããŠãã³ãŒããŒã®ç¶æ³ããããã«æ¹åã§ããŸãããããã§ãçæ³çãªè¡šç€ºãå®çŸããããšã¯ã§ããŸããã
ã¬ã³ãè£æ£
ã¬ã³ãè£æ£ã¯æ¬¡ã®ããã«æ©èœããŸãã
![](https://habrastorage.org/getpro/habr/post_images/99f/a90/650/99fa90650855458b0895914cd3e90ff8.png)
ã芧ã®ãšãããã¬ã³ã2.0ã䜿çšãããšãè§ãäžžããªããã¹ã ãŒãžã³ã°ãéåžžã«è¯ããªããŸãã ã¬ã³ãè£æ£ã¯å¥ã®éèŠãªãããã¯ã§ããèå³ãããå Žåã¯ã Charles Poynton [6]ã®ã¬ã³ãFAQã§å æ¬çãªæ å ±ãèŠã€ããããšãã§ããŸãã
ç§ãã¡ã®å Žåãé»ååè·¯ã®ããœãŒã¹ä¿¡å·-çµæãã®æ²ç·ã«ã€ããŠã§ã¯ãªãã人éã®èŠèŠã®è©³çŽ°ã«ã€ããŠè©±ããŠããããã§ã¯ãããŸããã èŠèŠçãªåå¿ã¯ãç©ççãªå 床ã®å¹³æ¹æ ¹ã«ã»ãŒæ¯äŸããŸãã èšãæãããšãé»ãèæ¯ã«2ã€ã®çœããã¯ã»ã«ãããããã®ãã¡ã®1ã€ã2çªç®ã®å åããã2åå€ãã®å åãæŸåºããå Žåãããã¯2åæããèŠãããšããæå³ã§ã¯ãããŸããã å®éãã©ãã1.4åã§ãã ããã¯ç°¡åã«ç¢ºèªã§ããŸãã
![](https://habrastorage.org/getpro/habr/post_images/3a7/f1b/3b2/3a7f1b3b2fe222a2651ccd32374f90e5.png)
å³åŽã«ã¯2ã€ã®ãã¯ã»ã«ããããå·ŠåŽã®ãã¯ã»ã«ããã1ç§éã«2åã®å åãæŸåºãããšèªä¿¡ãæã£ãŠèšããŸãã ãã ãã2åæããèŠããŸããã 4ãã¯ã»ã«ã§ã¯çŽ2åã®æãããåŸãããŸããã2åã§ã¯ãããŸããã
äžèŠãªèª¬æãçç¥ããŠãäž»ã«2ã€ã®RGBè²ç©ºéããããšèšãããšãã§ããŸãã䞻芳çã«åäžãªsRGBãšç©ççã«åäžã§ãã åŸè ã§ã¯ãå€ã¯ç©ççãªå 床ã«æ¯äŸããŸãããsRGBãšã¯å¯Ÿç §çã«ãå€ã¯äž»èŠ³çãªå 床ã«æ¯äŸããŸãã éåžžãç©ççã«åäžãªè²ç©ºéã¯ãåã«ãªãã¢RGBãšåŒã°ããŸãã ã¢ã³ããšã€ãªã¢ã·ã³ã°ã䜿çšããå Žåãç·åœ¢ç©ºéã§è²ã®æ··åãè¡ãå¿ èŠããããŸããã衚瀺ããåã«è²ãsRGBã«ããå¿ èŠããããŸãã å®éã«ã¯ããã®ã¹ãããã¯ãã°ãã°ç¡èŠãããã¢ã³ããšã€ãªã¢ã¹ã¯sRGBã§çŽæ¥å®è¡ãããŸãã å€ãã®å Žåãããã¯èš±å®¹å¯èœãªçµæãââãããããŸãããããã¹ããã©ã¹ã¿ã©ã€ãºããããã§ã¯ãªããMicrosoft Wordã§çŽæ¥ç€ºãããšãã§ããŸãã ããªãã¯ã¯ã圌ãããŒãããåæç»ããã®ã§ã¯ãªããããçš®ã®ããªãã¯ã䜿çšããŠããã¹ããéžæããããšã§ãã éåžžã®çœé»ã®ã¹ã ãŒãžã³ã°ã§ã¯ãéžæããããã¹ãã¯æ±ããŠããŸãã ClearTypeã䜿çšãããšãè²ã®å¢çç·ãååŸãããŸãã
![](https://habrastorage.org/getpro/habr/post_images/a03/031/355/a03031355c6209db19d1238bd4a94e5a.png)
ãããã£ãŠãæ£ããã¬ã³ãè£æ£ã¯Windowsã§å®è¡ãããŸããïŒéžæãããããã¹ãã§ã¯å®è¡ãããŸããïŒãLinuxã§ã¯éåžžç¡èŠãããŸãã FreeTypeã¯ãã©ã¹ã¿ã©ã€ã¶ãçæããçœé»ã®ã¹ã ãŒãžã³ã°ãã¹ã¯ã«ç®çã®ã¬ã³ãå€æãç°¡åã«é©çšã§ããŸãã ãã ããããã¯Windowsãšåãããã«æ©èœããŸããè²ã®å転ã¯ã¬ã³ãã®å転ãçæããŸãã ã¬ã³ãã¯ãæ··åããåã«åè²æåã«åå¥ã«é©çšããå¿ èŠããããããå®éã«ã¯åœ¹ã«ç«ã¡ãŸããïŒå®éã«ã¯ãç·åœ¢RGBã§ã®äœæ¥ãšåçã§ãïŒã ãããã£ãŠãçœé»ãã¹ã¯ã®ã¬ã³ãè£æ£ã¯ãçœãèæ¯ã«é»ãããã¹ãã衚瀺ããå Žåã«ã®ã¿åœ¹ç«ã¡ãŸãã ãã®å Žåãé å2ã®å€ãä¿®æ£ã«äœ¿çšã§ããŸãããé»ã®èæ¯ã«çœã®ããã¹ãã衚瀺ããå Žåã¯ãã¬ã³ãå€ãå転ãããã€ãŸã0.5ååŸã®å€ã䜿çšããå¿ èŠããããŸãã åé¡ã¯ãããã¹ããšèæ¯ã®æ£ç¢ºãªè²ãããããªãããšã§ããããã¹ãã¯ã°ã©ããŒã·ã§ã³ãŸãã¯ç»åã®äžã«è¡šç€ºããããšãã§ããŸãã ãããã£ãŠããçœé»ãã¬ã³ãè£æ£ã¯æ©èœãããããã«ã«ã©ãŒãã¬ã³ãè£æ£ã¯é«äŸ¡ã§å®è£ ãå°é£ã«ãªãå¯èœæ§ããããŸãã åé¡ã¯ããªãã¢RGBããã£ãã«ããšã«8ããã以äžãå¿ èŠãšããããšã§ããããããªããšãå¿ ç¶çã«è²ã倱ãããŸãã ããã¹ãã®å Žåãããã¯æå¹ãããããŸãããããã¹ã¯ãããå šäœã§ãããèŠæ±ããããšã¯ã§ããŸããïŒ ãŸãããã£ãã«ããšã«16ãããã䜿çšãããªãã¢RGBã§ã®äœæ¥ã¯ãäŸç¶ãšããŠèš±å®¹ã§ããªãèŽ æ²¢ã§ãã
ã¬ã³ããæ©èœããŸãã
å®éãç¶æ³ã¯ããã«æªåããŠããŸãã åãIrfanviewã§Linuxã®ã¹ã¯ãªãŒã³ã·ã§ããã«2ã«çããå€ã®ã¬ã³ãè£æ£ãé©çšãïŒç»å->è²ã®åŒ·èª¿...ïŒãããã¹ããèŠãããšãã§ããŸãã ã¢ã€ã³ã³ãé²åºé床ã«èŠãããšããäºå®ã«æ³šæãæããªãããã«ããŠãã ãããããã¹ãã«æ³šç®ããŠãã ããã
![](https://habrastorage.org/getpro/habr/post_images/52c/b42/9d3/52cb429d3f93df3cd95a6b616a60e5d9.png)
奜ãã§ãã ç§ã¯ãŸã ããŸããã AGGã§ããã¹ãã®ã©ã¹ã¿ã©ã€ãºã«åãçµãã§ãããšããæ£ããã¬ã³ãè£æ£ã§ãã¹ãŠã®åé¡ã解決ã§ãããšæããŸããã çš®é¡ã¯ãããŸããïŒ ã©ã®ããã«ããŸãæ©èœããŠããäžéšã®èŠçŽ ã¯åçŽããã³æ°Žå¹³ã¹ãããŒã¯ããã倪ãèŠããäžéšã¯èããªããŸãã ããã¯ãsans-serifãã©ã³ããããã³ç¹ã«ã¹ãããŒã¯ããã¯ã»ã«åäœã§ããŒãã¢ã©ã€ã³ãããŠããå Žåã«éåžžã«é¡èã§ãã åé¡ã¯ãTrueTypeãã³ããã¢ã³ããšã€ãªã¢ã¹ãªãã®éåžžã®çœé»ã©ã¹ã¿ã©ã€ã¶çšã«ç¹å¥ã«èšèšãããŠããããšã§ãïŒ ã¢ã³ããšã€ãªã¢ã·ã³ã°ã䜿çšããããšã¯åœ¢åŒäžæ£ãããªããã»ãšãã©ã®Linuxã·ã¹ãã ã¯ãããå®è¡ããŸãã 以äžã®ç»åã¯ãFreeTypeãšGetGlyphOutlineïŒïŒã®äž¡æ¹ã䜿çšããã¢ã³ããšã€ãªã¢ã¹ã䜿çšããã©ã¹ã¿ãŒåã®çµæã§ãã
![](https://habrastorage.org/getpro/habr/post_images/151/09d/e11/15109de111e8507953f4a3e4e51daa58.png)
ããã¹ãã¯èŠæ ããæªããLinuxã§ã»ãšãã©ã®å Žåã«èŠããããã®ãšéåžžã«äŒŒãŠããŸãã ããã§ã¯ã¬ã³ãè£æ£ã¯åœ¹ã«ç«ã¡ãŸããã ããšãã°ãã¬ã³ãå€ã1.5ã®å Žåã«æé«ã®çµæãåŸãããŸããã ãŸã èŠæ ããæªãïŒ
![](https://habrastorage.org/getpro/habr/post_images/b2b/97e/1c8/b2b97e1c8d433872601239afd591a31d.png)
éäžã§ãç¹å®ã®ãµã€ãºããå§ããŠãããã¹ããéãèŠããããã«ãªã£ãŠããããšã«æ°ä»ãã¯ãã§ãã ããã¯ãŸãã«Windowsã§èµ·ããããšã§ãã ClearTypeããªãã«ãããšãæããã§ãïŒããã¹ããµã€ãºã¯æ£ç¢ºã«ä¿åãããŸããïŒã
![](https://habrastorage.org/getpro/habr/post_images/a18/eb9/8ed/a18eb98ed7d062bd8504ee919f75a888.png)
äžè¬çã«ãããªãã¯ãã®èããç解ããŸããã ããæ確ã«ããããã«ãWin32 APIããGetGlyphOutlineïŒïŒé¢æ°ã«ãã£ãŠè¿ããããã¯ãã«ç»åãå¢ãããŠãäœãèµ·ãããã確èªã§ããŸãã
![](https://habrastorage.org/getpro/habr/post_images/165/079/03d/16507903ddfe057710ae1a0e3b66f966.png)
ããã¯ãç¹èš±ååŸæžã¿ã®ã¢ã°ã¬ãã·ããã³ãã13ãã¯ã»ã«ã®å ¬ç§°ãµã€ãºã«å¯ŸããŠã©ã®ããã«æ©èœãããã§ãã ãã®ããããkãã®ã¹ãããŒã¯ã¯éåžžã«çŽ°ãèŠããã»ãšãã©èŠããŸããã Times New Romanã®ã€ã¿ãªãã¯äœã¯ããã«æªãããzãã®æç·ãå®å šã«æ¶ããŸãã æªã¿ã¯ãã¹ã ãŒãžã³ã°ãè¡ããªãéåžžã®ã©ã¹ã¿ã©ã€ã¶ã«ã¯åœ±é¿ããŸããããFreeTypeã䜿çšããã©ã¹ã¿ã©ã€ã¶ã¯ãããã®åœ±é¿ãåããŸãã ãã¯ã»ã«ã®ã«ãã¬ããžã®çšåºŠãçŽæ¥èšç®ãããããæãã¹ãããŒã¯ãzãã®ã«ãã¬ããžã¯æ£çŽã«ãŒãã«ãªããŸãã ã€ãŸãããã³ããåŸãããã«TrueTypeãã€ãã³ãŒãã解éããŠãæå³ããããŸããïŒã©ã€ã»ã³ã¹ãè³Œå ¥ããå¿ èŠãããããšã¯èšããŸã§ããããŸããïŒã ã¹ã ãŒãžã³ã°ã¯ââè¯ãããšã§ãããããªãèªèº«ã®ããã«ããã䜿ãã¹ãã§ã¯ãããŸããã ãããã«ãããäžé©åãªãã³ãã£ã³ã°ãšçµã¿åãããŠäœ¿çšââãããå Žåãã¹ã ãŒãžã³ã°ã®ãªãããã¹ãã奜ãã§ãããã
AutoType FreeType
FreeTypeããŒãžã§ã³2ã§ã¯ãDavid Turnerãèªåãã³ãã¡ã«ããºã ãå°å ¥ããŸããã ããã¯éåžžã«ããŸãæ©èœããŸãããããã«ããããããããã®çŽæ¥é©çšã¯çæ³ããã¯ã»ã©é ãçµæããããããŸãã 1.5ã®ã¬ã³ãã§Verdanaãããã»ãããã©ã¹ã¿ã©ã€ãºããçµæãèŠãŠãã ããã
![](https://habrastorage.org/getpro/habr/post_images/dbe/e0d/4e8/dbee0d4e8d6f83d093ae50b7f0b6a16b.png)
éãã³ãã£ã³ã°ã®äŸãšæ¯èŒããŠãã ããïŒ
![](https://habrastorage.org/getpro/habr/post_images/7bb/5d3/9c1/7bb5d39c120ca5cf7dcf8f4e61b51db7.png)
ãã³ããªãã®ããŒãžã§ã³ã¯ééããªãããæ£ç¢ºã«èŠããŸããããŒãããŠããŸãã äž»ã«3ã€ã®éãããããŸãã
- èªåãã³ãã£ã³ã°ã§ã¯ãå°ããªäžžã¿ã®ããèŠçŽ ã§ããšã©ãŒãçºçããŸãïŒåçŽã¹ãããŒã¯ãšæãã¹ãããŒã¯ã®èŠèŠçãªå€ªãã®éãïŒã
- ãç¬ããšããåèªã®ãogãã®ããã«ãèªåãã³ãã£ã³ã°ã誀ã£ãã«ãŒãã³ã°ã«ã€ãªããå ŽåããããŸãïŒãã®äŸã§ã¯ããã©ã³ãã®ã«ãŒãã³ã°ããŒãã«ã䜿çšãããŸããïŒã
- èªåãã³ãã£ã³ã°ã¯ãããã¹ãã®è¡å šäœã«ãšã©ãŒãèç©ãããšããåãåé¡ã«ã€ãªããããã®çµæãããã¹ãã®å³ç«¯ããããããã«ãªããŸãã
Autohinterã¯ãTimes New Romanãªã©ã®ããè€éãªãã©ã³ãã§ããé©åã«æ©èœããŸãããåãé 眮ã®åé¡ãåŒãç¶ãçºçããŸãã
ã©ãããïŒ
楜ãã¿ã«ããŠãå¥ã®äŸã瀺ããŸãã
![](https://habrastorage.org/getpro/habr/post_images/02d/490/e0d/02d490e0d87cf7ef77b1bc05b2cbecd6.png)
蚱容ã§ãã解決çãèŠã€ããããšã¯ãŸã å¯èœã§ãïŒ ãã ããæåã«ãããããçš®é¡ã®ãã³ãã䜿çšããæ¹æ³ããªããåæã«ä»»æã®çž®å°ºã§ããã¹ãã®æ£ããäœçœ®ãç¶æããæ¹æ³ããªãããšã«åæããå¿ èŠããããŸãã èªç¶ãªãŒãããå ããããã³ãã®ãªãããã¹ãã®ã¿ã ããã§ããã©ã¹ã¿ãŒåã¯æ¹åã§ããŸãããããŸãéèŠã§ã¯ãªããã®ãç ç²ã«ããå¿ èŠããããŸãã ã€ãŸããããã¹ãã®åçŽæ¹åã®äœçœ®ãšé«ãããããã«äžæ£ç¢ºã«ããããšãã§ããŸãã ãšããããTrueTypeãã³ãã¯åãããã«æ©èœããŸããããšãã°ãé«ãã12ãã¯ã»ã«ãš13ãã¯ã»ã«ã®ããã¹ãè¡ã¯ãç»é¢äžã§åãé«ãã«ãªããŸãããèŠãç®ã¯ç°ãªããŸãã
![](https://habrastorage.org/getpro/habr/post_images/e99/715/769/e99715769f509741028668e723b54d64.png)
ã€ãŸããæ£ç¢ºãªæ°Žå¹³æ¹åã®äœçœ®ãç¶æããªããç®ã«åªããããã¹ããäœæããã«ã¯ã次ã®ãã®ãå¿ èŠã§ãã
- LCDã¢ãã¿ãŒã§æ°Žå¹³ãµããã¯ã»ã«RGBã¹ã ãŒãžã³ã°ã䜿çšããŸãã
- åçŽæ¹åã®ãã³ãã®ã¿ã䜿çšããæ°Žå¹³æ¹åãå®å šã«æŸæ£ããŸãã
- ãã³ãã£ã³ã°ãããŠããªãã°ãªãã«ã¯ãé«è§£å床ã§èšç®ãããæ£ç¢ºãªã°ãªããªãã»ããå€ã䜿çšããŸãã
- ã«ãŒãã³ã°ããŒãã«ã®æ£ç¢ºãªé«è§£å床å€ã䜿çšããŸãã
å°ããªã¬ã³ãè£æ£ã§çµæãæ¹åã§ããŸãããããã¯å¿ èŠãããŸããã ããã¹ãã¯sRGBã§ãçŽæ¥ãããã«èŠããŸããã€ãŸããå転é è²ã§ãåé¡ã¯ãããŸããã
FreeTypeãšãã®èªåçŒçµã«ããã蚱容ã§ããçµæãç°¡åã«éæã§ããŸãã ããã¯ãTrueTypeã®ç¹èš±ååŸæžã¿ã®ãã³ãã®ã©ã€ã»ã³ã¹ãå¿é ããå¿ èŠããªãããšãæå³ããŸãã Win32 APIã®GetGlyphOutlineïŒïŒé¢æ°ã䜿çšããŠãåãããšãã§ããŸãã é£ããã§ãããããã§ãå¯èœã§ãã
RGBã®ãµããã¯ã»ã«ã©ã¹ã¿ã©ã€ãº
Steve Gibsonã®ããŒãžã ãSubpixel Rasterization Technologyã [2]ã«ãRGBã§ã®ãµããã¯ã»ã«ã©ã¹ã¿ã©ã€ãºã®äœ¿çšã«é¢ããå æ¬çãªã¬ã€ãã³ã¹ããããŸãã ãŸããGetGlyphOutlineïŒïŒãçæã§ãã64ã¬ãã«ã®ã¹ã ãŒãžã³ã°ããããããã§ãã®ãã¯ãããžãŒã䜿çšããŠã¿ãŸãããMaximShimanarevã ãWindows Longhornã§ã®ClearTypeã®åäœã [3]ïŒUPDïŒãªã³ã¯ã¯æªãã§ããã ãã¡ã ã ãã¡ãããŸãã¯ãã¡ãã§èªãããšãã§ããŸã ïŒ æ¬¡ã®ãªã³ã¯ããããã¹ãŠã®ãœãŒã¹ãå«ãWindowsçšã®ãã¢ããã°ã©ã ãããŠã³ããŒãã§ããŸãã
antigrain.com/stuff/lcd_font.zip
ããã«ã AGGã®åçŽãªãå€æ¹ã®èã®äžãã®ã©ã¹ã¿ã©ã€ã¶ãŒãäœæããŸããã 次ã®ãã¢ã§èŠã€ããããšãã§ããŸãã çŸæç¹ã§ã¯ãã³ãŒãã¯å®å šã§ã¯ãªããããªãé ãã§ãã ããã¯ãã¢ã§ã¯æ£åžžã§ãããäž»ã«ã¹ã¿ãã¯å ã®2048ãã¯ã»ã«ä»¥äžã®äžæãããã¡ãŒã䜿çšãããããå®éã®ãããžã§ã¯ãã§ã¯åãå ¥ããããŸããã
æãåçŽãªå Žåãå¿ èŠãªã®ã¯åã«ã©ãŒãã£ã³ãã«ã®éæ床ã®å€ã ãã§ãã ãã®ãã¡ã€ã«ã§ã¯ãagg_pixfmt_rgb24_lcd.hã ãŸããã¹ãã£ãŒãã®ããœã³ã説æããäœåãªãŒããã䜿çšããŸããã å®è¡äžã«å®è¡ãããŸãããäœããã®ãã£ãã·ã¥ã¡ã«ããºã ã䜿çšããŠäºåã«å®è¡ã§ããŸãã ãã®å Žåãå°ãªããšãåŸæ¥ã®ã¢ã«ãã¡ãã¬ã³ãã£ã³ã°ãããé ããªããããéãåäœããŸãã
ãã£ãã«ããã·ã³ã°ããããã°ããã«ã¯ãBrian Freisenã®ZoomIn [9]ããã°ã©ã ã䜿çšããŸããã 3ã®åæ°ã§ãããã¹ãŠã®ã¹ã±ãŒã«ã§ãããã³ãŒããã«ã©ãŒã®ããªãã«ãè¿œå ããŸããã å®è¡å¯èœãã¡ã€ã«ã¯ãã¡ãããããŠã³ããŒãã§ããŸãïŒ antigrain.com/stuff/ZoomInLcd.zip ïŒ2005幎ã«å€æŽããããœãŒã¹ã倱ããŸããããããã«ããŠãããããã®å€æŽã¯èªåã§ç°¡åã«è¡ããŸãïŒã éåžžã®çœé»ããã³ãµããã¯ã»ã«RGBã©ã¹ã¿ã©ã€ãºã®æ¡å€§çµæãæ¯èŒã§ããŸãã
![](https://habrastorage.org/getpro/habr/post_images/cb7/962/931/cb7962931343f3a9c7d1ef645cd3c7c1.png)
é»ãšçœã®ã©ã¹ã¿ã©ã€ãº
![](https://habrastorage.org/getpro/habr/post_images/aec/42f/d87/aec42fd87b1a38a50b7b7046fb361208.png)
ãµããã¯ã»ã«RGBã©ã¹ã¿ã©ã€ãº
ãã®ä»ã®ãã¥ã¢ã³ã¹
åçŽæ¹åã®ãã³ãã£ã³ã°ãä¿æããããã«ãæ°Žå¹³æ¹åãåãé€ãããã«ãåçŽã«ãã³ã¿ãŒãã ãŸãïŒæåãæ°Žå¹³æ¹åã«åŒã䌞ã°ããŠããã³ã¿ãŒãé«ç²ŸåºŠã§åäœããããã«ããŸãã åé¡ã¯ãFreeTypeã®AGGãã©ã³ããšã³ãžã³ãããã³ããäžãããããšäžæ£ç¢ºãªãªãã»ããå€ã䜿çšããããšã§ãã æè¡çã«ã¯ããã³ã¿ãŒã¯åŒ·ãåŒã䌞ã°ãããã°ãªãã®æ£ç¢ºãªãªãã»ããå€ãèšç®ããå¿ èŠããããŸãããäœããã®çç±ã§èšç®ããŸããã å ã®ããã³ããªãããªãã»ããã䜿çšããããã«å€æŽããå¿ èŠããããŸããã å€æŽãããããŒãžã§ã³ããã¢ããã°ã©ã ã«å«ãŸããŠããŸãã ã°ãªãæ²ç·ãååŸãããããã¢ãã£ã³å€æã䜿çšããŠå§çž®ãçŽããŸãã æãåçŽãªã±ãŒã¹ã§ã¯ãããã§ååã§ãã ã«ãŒãã³ã°ããŒãã«ã«ã¯ãããªãæ£ç¢ºãªå€ãå«ãŸããŠããŸãã
ããã§ãDavid Turnerã«è©±ãæ»ããŸããX軞ã«æ²¿ã£ããã³ããç¡èŠããŠãY軞ã«æ²¿ã£ããã³ãã®ã¿ãèš±å¯ãããªãã·ã§ã³ãautohinterã«è¿œå ããã®ã¯çã«ããªã£ãŠããŸããïŒ ãŸãã¯ãæ¢åã®ãã³ããããã¯ããã«ç°¡åãªå¥ã®1次å ãã³ããäœæã§ããŸãã ã芧ã®ãšããããµããã¯ã»ã«RGBã©ã¹ã¿ã©ã€ãºã䜿çšããããã¹ãã¯ãAdobe Acrobat Readerãšéåžžã«ãã䌌ãŠããããããã®å Žåããææ°ã®Linuxã·ã¹ãã ãããã¯ããã«åªããŠããŸãïŒãã®èšäºã¯2007幎-ãããTranslãã«æžãããŠããŸã ïŒã ããã¯ãLinuxããŒã¹ã®ã·ã¹ãã ã®æ®åãšæ®åã«åœ¹ç«ã€ãšèããŠããŸãã
Windows APIã®äœ¿çšã¯ã¯ããã«è€éã§ãã GetGlyphOutlineïŒïŒé¢æ°ã¯ãæŽæ°ãã¯ã»ã«ã®ãªãã»ããå€ãè¿ããŸãããããã¯ç§ãã¡ã«ãšã£ãŠã¯ç¡ç€Œã§ãã ã¹ãã¬ããã¯ä¿åãããŸããã GetCharABCWidthsFloatïŒïŒã®ãããªé¢æ°ããããŸããããã³ãä»ãã°ãªãã®å€ãèšç®ããæµ®åå°æ°ç¹æ°ãå«ãŸããŠããã«ããããããå®éã«ã¯æŽæ°ã§ããããã圹ã«ç«ããªãã®ã§ãã ãã®ãããæ£ç¢ºãªãªãã»ãããååŸããç°¡åãªæ¹æ³ãèŠã€ããããŸããã§ããã ãã®çµæã2ã€ã®ãã©ã³ããåæã«äœ¿çšããå¿ èŠããããŸããã1ã€ã¯é«ã1024ãã¯ã»ã«ã§ããã1ã€ã¯å¿ èŠãªãµã€ãºã§ããã³ããšã¹ãã¬ããã¢ãã£ã³ãããªãã¯ã¹ã䜿çšããŠããŸããã ç§ã¯äœããèŠéããŠãããããããªããšèªããŸããããããããæ£ç¢ºã«å®è£ ããæ¹æ³ã«ã€ããŠã¯èããŠããŸããã ãããã圌ãã¯ãMicrosoft Wordã®ææžåãããŠããªãæ©èœãããã€ã䜿çšããŠããŸãããããã¯ç«¶åãšããç¹ã§å®å šã«äžæ£ã§ãã ãã¡ããããããå®å šã«ç¢ºä¿¡ããããšã¯ã§ããŸããããç¶æ³ãããMicrosoftã¯WYSIWYGããã¥ã¡ã³ãããŒã«ãéçºããããã®ååãªAPIãæå³çã«æäŸããŠããªããšæãããŸãã ããã¯å žåçãªç¬å æ¿çã§ããããã®çµæãæè¡é²æ©ã®é»å®³ã«ã€ãªãããŸãã
å®éãããã«æªãããšã§ãã ç¹èš±ååŸæžã¿ã®ãã³ãã¯ããã¹ãã¬ããããããªãã¯ã¹ã§ã¯æ©èœããŸããã å°ãªããšããã°ãªããæ£ããåŠçããã¹ã±ãŒãªã³ã°ãã¡ã¯ã¿ãŒã¯1ã€ãèŠã€ãããŸããã§ããã 1ïŒ1ã¹ã±ãŒã«ã®ã¿ãæ£åžžã«æ©èœããŸãããããã®çµæãã¹ã ãŒãžã³ã°ãªãã§çœé»ã®ã©ã¹ã¿ã©ã€ã¶ãŒã䜿çšããããåŸãªãã£ãåãåé¡ãçºçããŸããã
![](https://habrastorage.org/getpro/habr/post_images/4e4/fb6/aec/4e4fb6aecda45d9560e9ac5c50099389.png)
æ°å³ãæªããã ã¹ã±ãŒãªã³ã°ãè¡ããšãã°ãªããã²ã©ãç ŽæããŸãã ããã§ãããšãã°ãæäœã®Times New RomanïŒ16åã®æ°Žå¹³ã¹ãã¬ããïŒïŒ
![](https://habrastorage.org/getpro/habr/post_images/dc0/039/143/dc00391437be67724b5e98fab4f2866b.png)
ãããšãããã§ãã ArialïŒ100åã®æ°Žå¹³ã¹ãã¬ããïŒ-é¢çœãæ±ã ããããèªãããšã¯äžå¯èœã§ãã
![](https://habrastorage.org/getpro/habr/post_images/310/8a5/e5f/3108a5e5f569503a2fbf83fc56673a5a.png)
FreeType autohinterãã©ããªã¹ãã¬ããã«å¯ŸããŠãæ£ããæ©èœãããšèšã£ãŠãæå³ããªããšæããŸãã
Microsoft APIã¯ããšã³ãžãã¢ãªã³ã°æåãã°ããŒãã«ãªã¢ã€ãã¢ãäžåæããªããã²ããŸãããã®äžå¥åº·ãªã©ã³ãã ãœãªã¥ãŒã·ã§ã³ã®éãŸãã«éããªãããã§ãã äžè¬ã«ãMicrosoftãœãããŠã§ã¢ã¯1ã€ã®ããŒãã³ãŒããããæ¹æ³ã§ã®ã¿äœ¿çšã§ããŸãã å³ãžã®ã¹ããããå·Šãžã®ã¹ããã-ãããŠãã¹ãŠããªããªã£ãŠããŸãã ããã¯åœŒãã®ããžãã¹ã«ã¯è¯ããããããŸããããå°ãªããšãå ¬å¹³ã§ã¯ãããŸããã ãã®ãããªããªã·ãŒã¯ãå¹³çãªç«¶äºã®æ¡ä»¶ã«éåãããã®çµæãåžå Žã®å šäœçãªé²æ©ãé ãããŸãã ç¬å çŠæ¢å§å¡äŒã¯ãMedia PlayerãŸãã¯Internet Explorerãã·ã¹ãã ããåé€ãããšããã°ãããèŠä»¶ã§ã¯ãªãããã®ç¶æ³ã«æ³šæãæãå¿ èŠããããŸãã
æçµçã«ãå€ã16ãã¯ããå°ããªæªã§ãããã»ãšãã©ã®å Žåã«é©ããŠããŸãããããã§ãã€ã¿ãªãã¯ã¿ã€ã ãºãã¥ãŒããŒãã³ã§ã¯æ©èœããªãããšãããããŸããã
ãã¢ããã°ã©ã
TrueTypeã䜿çšããWindowsããã°ã©ã ã¯æ¬¡ã®ãšããã§ãã
www.antigrain.com/research/font_rasterization/truetype_test_02_ft.zip
ãããŠãWindows APIã䜿çšããããŒãžã§ã³ã¯æ¬¡ã®ãšããã§ãã
www.antigrain.com/research/font_rasterization/truetype_test_02_win.zip
FreeTypeã®ããŒãžã§ã³ã«ã¯ãããã°ã©ã ãã£ã¬ã¯ããªã«æ¬¡ã®ãã¡ã€ã«ãå¿ èŠã§ãïŒarial.ttfãariali.ttfãgeorgia.ttfãgeorgiai.ttfãtahoma.ttfãtimes.ttfãtimesi.ttfãverdana.ttfãverdanai.ttfã ãããã¯ïŒ WINDIRïŒ \ Fontsãã©ã«ããŒã«ãããŸãã
ã³ã³ãã€ã«ããå Žåã¯ã AGGããŒãžã§ã³2.4ãŸãã¯2.5ãããŠã³ããŒãããagg-2.4 \ research \ win32 \ trutype_lcd \ *ã*ã®ãããªãã¡ã€ã«ã解åããŸãã FreeTypeããŒãžã§ã³ã®å ŽåãFreeTypeãèªåã§ãã«ãããå¿ èŠããããå Žåã«ãã£ãŠã¯ãããžã§ã¯ãã®èšå®ãå€æŽããå¿ èŠããããŸãã
AGGã®äŸã§äœ¿çšãããŠãããã®ãšåæ§ã®é©åãªã¡ã€ã¯ãã¡ã€ã«ãäœæãããšãããã°ã©ã ãLinux / X11ãŸãã¯å¥ã®ã·ã¹ãã çšã«ã³ã³ãã€ã«ããããšãã§ããŸãã
FreeTypeã®ããŒãžã§ã³ãšWinAPIã®ããŒãžã§ã³ã®ããã¹ãã¯ããã³ãã¢ã«ãŽãªãºã ãç°ãªãããã«ç°ãªã£ãŠèŠããŸãã
![](https://habrastorage.org/getpro/habr/post_images/0f6/53e/d91/0f653ed91c613ea77896517a6a0804c5.png)
ããã«ã¯å€æ°ã®èšå®ã衚瀺ãããŸãã ãŸãããã©ã³ããå€æŽããã ãã§ãªããã«ãŒãã³ã°ããã³ãããµããã¯ã»ã«RGBã©ã¹ã¿ã©ã€ãºã®ãªã³/ãªããåãæ¿ããããšãã§ããŸãã ããã«ãç»åãå転ããŠãé»ãèæ¯ã«çœãããã¹ãã衚瀺ã§ããŸãã
ãã©ã³ãã¹ã±ãŒã«ã¹ã©ã€ããŒã䜿çšãããšããã©ã³ããµã€ãºãã¹ã ãŒãºã«å€æŽã§ããŸãã ã芧ã®ãšããããã³ãããªã³ã®å Žåãç·ã¯ãã¯ã»ã«ã«é¢é£ä»ããããŸãããããã¹ãã®å¹ ã¯æ»ããã«å€åãç¶ããŸãã ééãå€æŽããããšã§ããã®å¹æãããããèŠãããšãã§ããŸãã ãã³ããªãã§ãããã¹ãã®ã¬ã€ã¢ãŠãã¯ã©ã®çž®å°ºã§ãå®å šã«ä¿æãããŸãããããã¹ãã¯ãŒãããŠèŠããŸãã åçŽã®ã¹ãããç·-ããã¹ãã®é®®æããšç²ŸåºŠã®éã®æãåççãªåŠ¥åç¹ã ç§èªèº«ããã£ã©ã¯ã¿ãŒã®åœ¢ãç¶æããªãããåçŽæ¹åã®ãã³ããå質ãæ¹åããæ¹æ³ã«ã·ã§ãã¯ãåããŠããŸãã
ééãå¹ ãããã³æäœã®ã€ãããŒã·ã§ã³ã¹ã©ã€ããŒã¯ãã³ã¡ã³ããå¿ èŠãšããªããšæããŸãã ã³ã³ãã¥ãŒã¿ã°ã©ãã£ãã¯ã¹ã«ç²ŸéããŠãã人ã«ãšã£ãŠã¯ãããããéåžžã®ã¢ãã£ã³å€æã§ããããšã¯æããã§ãã 1ã€ã®äºå®ã®ã¿ã«æ³šç®ããããšæããŸãããçœé»ãã¢ãŒããšããµããã¯ã»ã«RGBã©ã¹ã¿ã©ã€ãºãã¢ãŒãã§ã¯ããã€ã¿ãªãã¯ã·ãã¥ã¬ãŒã·ã§ã³ãã¹ã©ã€ããŒã®åäœãå°ãç°ãªããŸãã ããã¯ãã¢ãŒã¯ã¿ã³ãžã§ã³ããä»ããŠå€ãæ£ããåŠçããã®ãé¢åã ã£ãããã§ãã ãããã«ãããããã¯éèŠã§ã¯ãããŸããã
ç§ãç¹ã«èªãã«æã£ãŠããæ©èœã¯ã倧èãªæš¡å£ãã§ãã 次ã®ããã«æ©èœããŸãã
![](https://habrastorage.org/getpro/habr/post_images/0d5/6f4/b95/0d56f4b950c5d51da4082e6c424a10b1.png)
å¥ã®ç°¡åãªããªãã¯ããããŸãã AGGã«ã¯ãç¹å®ã®ããªãŽã³ã®çè·é¢ãèšç®ã§ããconv_contourãŠãŒãã£ãªãã£ããããŸãã ãã ããçŽæ¥äœ¿çšãããšãŒãããçµæã«ãªãããµã€ã³ã®åœ¢ç¶ã倧ããå€åããŸãïŒãã ããããã¯ã°ããŒãã·ã£ããŠãšãã§ã¯ãã«åœ¹ç«ã¡ãŸãïŒã
![](https://habrastorage.org/getpro/habr/post_images/5af/c2d/0a2/5afc2d0a2982ac75e934166ff3f86773.png)
ãŒããã¯ç°¡åã«åé¿ã§ããŸãã ã°ãªããããšãã°100åãŸãã¯1000ååçŽã«åŒã䌞ã°ããçè·é¢ããªãŽã³ãèšç®ããŠå§çž®ããŸãã ãã®ãããçµæãšããŠãY軞ã«æ²¿ã£ã座æšã¯ã»ãšãã©å€åãããããã¹ãã¯æ確ãªãŸãŸã§ãã ãã¢ããã°ã©ã ã«ã¯faux_weightã¯ã©ã¹ããããŸãã ç¹°ãè¿ããŸãããç¡æã®æ°Žå¹³ã¹ã±ãŒãªã³ã°ãã©ãã ãå€ãã®æ©äŒããããããã¯é©ãã¹ãããšã§ãã ãããŠãé©ãã¹ãããšã§ã¯ãããŸãããããã¯ã»ã«ã«åçŽã«ã¹ããããããšèŠèŠçãªçµæãæ¹åãããŸãã
å¥ã®äŸïŒãã®èªç±ã倧奜ãã§ãïŒïŒ
![](https://habrastorage.org/getpro/habr/post_images/d17/fca/041/d17fca0419528939e7fc003793797a8e.png)
ããã¯ãã¹ãŠåããžã§ãŒãžã¢å·ã®ãããã»ããã§ããããœãããŠã§ã¢ã®ã¿ãå€æãããŠããŸãã å®å šã«èªã¿ããããé®®æã§ãåæã«æ»ããã§ãïŒã¯ããç§ã¯åæããŸãã圌女ã¯æåã«ãŒãã³ã°ã§å·ã€ããããªãã§ãããïŒã
ãŸãã¯ãTahomaãããã»ããã§ãåãã§ãã
![](https://habrastorage.org/getpro/habr/post_images/a47/7d2/dcc/a477d2dcc14fc9966ae7dd7ca80ca5d8.png)
ã¬ã³ã調æŽã¹ã©ã€ããŒã¯ãã¬ã³ãè£æ£ãå¶åŸ¡ããŸãïŒãã£ã³ãã«ããšã«åå¥ã«å®è¡ãããŸãïŒã çè«çã«ã¯ããçŽæ¥ã®è²åããå ã®è²ã«é©çšããã·ãŒã³ãã¬ã³ããªã³ã°ããåŸããéã®è²åããé©çšããå¿ èŠããããŸãã ãã ãããããã®äŸã®ããã¹ãã¯åžžã«çœãŸãã¯é»ã§ãããããæåã®æäœã«ã¯æå³ããããŸããã
ãã©ã€ããªãŠã§ã€ãã¹ã©ã€ããŒã¯ãSteve Gibsonã®èª¬æã«åŸã£ãŠãšãã«ã®ãŒååžãå¶åŸ¡ããŸãïŒ www.grc.com/freeandclear.htm ã äžæ¬¡äœéã®ã¿ã管çããæ®ããé©å®èšç®ããã ãã§ååã§ãã ãã©ã€ããªãŠã§ã€ããå¢ããããšã§ãããã¹ããããæ確ã«ããããšãã§ããŸãããæåã®åšãã«è²ä»ãã®ã¢ãŠãã©ã€ã³ã衚瀺ãããŸãã 0.5ãŸã§ã®å€ã䜿çšããã®ã¯çã«ããªã£ãŠããŸããå€ã倧ãããšããã°ããŒãã®è²ãç®ç«ã¡ããããªããŸãã ç§ã«é¢ããŠã¯ãWindows ClearTypeã¯ãããŸãã«ãç®ç«ã€è²ãã°ããŒããæäŸããŸãã
ãã®ãããªã©ã¹ã¿ã©ã€ãºã¯è¿ éã«æ©èœããŸã
ãã¢ããã°ã©ã ã¯ããªãé ãã§ãã éšåçã«ã¯ãã¯ã¿ãŒæäœããªã³ã¶ãã©ã€ã§å®è¡ãããŸãããäž»ã«ããèªäœãéåžžã«é ãWinAPI GetGlyphOutlineïŒïŒé¢æ°ãåå ã§ãã äžæ¹ããã®ãããªã©ã¹ã¿åã¯ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã«ããããã¹ãã®ã©ã¹ã¿åãšåããããé«éã§ãã ãã ããæåã«ããã³ããæ£ããã¬ã€ã¢ãŠããããã³æ確ãªãµããã¯ã»ã«å質ãç¶æããªãããä»»æã«å¯å€ã®ããã¹ãã®ã©ã¹ã¿ã©ã€ãºãå éããããšã¯ãååãšããŠç°¡åãªäœæ¥ã§ã¯ãªãããšã«åæããå¿ èŠããããŸãã ä»»æã®å€æãšã¯ãé è¿æ³ãéç·åœ¢å€æãªã©ãæ¬åœã«ä»»æã®å€æãæå³ããŸãã
ã»ãšãã©ã®å Žåãæ±ã¢ãžã¢èšèªã䜿çšããŠããå Žåã§ããæ°Žå¹³ããã¹ããåŠçããå¿ èŠããããŸãã ããã«ãã»ãšãã©ã®ã°ãªãã¯åãå ¬ç§°ãµã€ãºã䜿çšããŸãã ããã§ã¯ããã£ãã·ã¥ã¡ã«ããºã ã圹ç«ã¡ãŸãã 3ã€ã®RGBãã£ã³ãã«ã®ãµããã¯ã»ã«ã¢ãã¯ããã¹ã¯ã«ã¯3åã®ã¡ã¢ãªãå¿ èŠã§ãããåæã«æ倧1/3ãã¯ã»ã«ã®ããã¹ãé 眮粟床ãåŸãããŸãã ã»ãšãã©ã®å Žåãããã¯éåžžã«ããŸãæ©èœããŸãã çè«çãªã豪è¯ãªãã©ã¹ã¿ãŒåã®å Žåãé€ããã°ãªãããšã«2ã€ã®çœé»ãã¹ã¯ã䜿çšããŠã1/6ãã¯ã»ã«ã®ç²ŸåºŠãåŸãããšãã§ããŸãã ãœãããŠã§ã¢ã¢ã«ãã¡ããã·ã³ã°ã§ãéåžžã«é«éã«åäœããŸããææ°ã®Intelããã»ããµãŸãã¯PPCã§ã¯ã°ãªããããçŽ2ã4ããªç§ã§ãã GPUã䜿çšãããšãé©åãªãã¯ã¹ãã£ãããŒããããšãããã¯ããã«éããªããŸãã å¯äžã®åé¡ã¯ãGPUããã£ã³ãã«éã§ã¢ã«ãã¡ãã¬ã³ãã£ã³ã°ãèš±å¯ããå¿ èŠãããããšã§ããããã¯ãç§ãç¥ãéããå¯èœã ãšæãããŸãã å°ãªããšããDavid Brownã¯ãã¬ãŒã³ããŒã·ã§ã³ã§ããã«ã€ããŠèšåããŠããŸã[8]ã ãããããã®ãããã¯ã«é¢ãã詳现æ å ±ïŒãã¯ã»ã«ã·ã§ãŒããŒãã6ãã£ãã«åºåãååŸããæ¹æ³ïŒãèŠã€ããããšãã§ããªãã£ãããããã®ãããã¯ã«é¢ãããªã³ã¯ãæäŸããŠããã ããã°å¹žãã§ãã
åç §è³æ
- Joel Spolskyããã©ã³ãã¹ã ãŒãžã³ã°ãã¢ã³ããšã€ãªã¢ã¹ãããã³ãµããã¯ã»ã«ã¬ã³ããªã³ã°ã
www.joelonsoftware.com/items/2007/06/12.html - ã¹ãã£ãŒãã®ããœã³ããµããã¯ã»ã«ãã©ã³ãã¬ã³ããªã³ã°ãã¯ãããžãŒã
www.grc.com/cleartype.htm - ããã·ã ã·ã§ããã¬ããWindows Longhornã®å
éšClearTypeã
www.byte.com/documents/s=9553/byt1113241694002/0411_shemanarev.html
ïŒãªã³ã©ã€ã³ç»é²ãå¿ èŠã§ããïŒ - FontFocusãã¯ã€ãããŒããŒãartofcode.com / fontfocus
- ãžã§ãã¢ããŠããããã©ã³ãã¬ã³ããªã³ã°ïŒãã¯ã»ã«ã°ãªããã®å°éã
www.codinghorror.com/blog/archives/000885.html - Charles Poyntonãã¬ã³ãã«é¢ãããããã質åã
www.poynton.com/GammaFAQ.html - Dave Sheaããµããã¯ã»ã«ãµãã¡ãªã
mezzoblue.com/archives/2007/06/12/a_subpixel_s - David Brown, Avalon Text. A PowerPoint presentation.
download.microsoft.com/download/1/8/f/18f8cee2-0b64-41f2-893d-a6f2295b40c8/TW04007_WINHEC2004.ppt - Brian Friesen, ZoomIn Program.
www.csc.calpoly.edu/~bfriesen/software/zoomin.shtml - David Turner and the others, FreeType font Library.
freetype.org - Jim Mathies, XP Style DPI Scaling.
www.mathies.com/weblog/?p=908 - Long Zheng, Windows Vista DPI scaling: my Vista is bigger than your Vista
www.istartedsomething.com/20061211/vista-dpi-scaling
PSïŒWebã¢ãŒã«ã€ãã®èšäºã®æåã®éšåïŒåçä»ãïŒãWebã¢ãŒã«ã€ãå ã®èšäºã®2çªç®ã®éšåïŒåçä»ãïŒã
PPSïŒç»é¢ã¿ã€ãã°ã©ãã£ã®ãããã¯ã«èå³ã®ãã人ã®ããã®ããã€ãã®èå³æ·±ããªã³ã¯ïŒ
æžäœïŒ
Windows 8ã®äºç®ã¢ãã¿ãŒäžã® åçŽãªãã©ã³ãã§ã¯ãããŸãã
Windows OSã®é«DPIå€
ããã°ã©ããä¿è·ããããã«