TrueType レンダラで一文字だけ描画できた

Windows XP 標準の Arial Black (ariblk.ttf) を読み込んで解析して "G" を描画したところ。前に True Type のフォーマットを仕事で調べたときに最低限は試作したのだけど、今回ちゃんと俺ライブラリとして作り直しています(進行形)。残りタスクとしては、

  • スケーリング機能を追加する(現在決めうち)
  • スプラインとスキャンラインの交点を求めるところの改良
  • アンチエイリアスの追加
    • 大きく描いて縮小ではなくてスキャンラインで線を描くときの両端だけの処理で

などなど。前に作ったときは交点を求める処理がやっつけだったので気になっていて、今回リベンジ中。

02:53:14:0981 main.cpp(1045) main() : Glyph #  0 (  887,   531) --> (  887,   836) Ctrl = (    0,     0) Bezier = 0, OnCurve
02:53:14:0981 main.cpp(1045) main() : Glyph #  1 (  887,   836) --> ( 1587,   836) Ctrl = (    0,     0) Bezier = 0, OnCurve
02:53:14:0981 main.cpp(1045) main() : Glyph #  2 ( 1587,   836) --> ( 1587,   211) Ctrl = (    0,     0) Bezier = 0, OnCurve
02:53:14:0981 main.cpp(1074) main() : Glyph #  3 ( 1587,   211) --> ( 1231,    24) Ctrl = ( 1386,    74) Bezier = 1, Sequential OffCurve 
02:53:14:0981 main.cpp(1045) main() : Glyph #  4 ( 1231,    24) --> (  865,   -25) Ctrl = ( 1077,   -25) Bezier = 1, OnCurve
02:53:14:0981 main.cpp(1074) main() : Glyph #  5 (  865,   -25) --> (  439,    64) Ctrl = (  604,   -25) Bezier = 1, Sequential OffCurve 
02:53:14:0981 main.cpp(1074) main() : Glyph #  6 (  439,    64) --> (  184,   329) Ctrl = (  275,   153) Bezier = 1, Sequential OffCurve 
02:53:14:0981 main.cpp(1045) main() : Glyph #  7 (  184,   329) --> (   94,   733) Ctrl = (   94,   505) Bezier = 1, OnCurve
02:53:14:0981 main.cpp(1074) main() : Glyph #  8 (   94,   733) --> (  193,  1150) Ctrl = (   94,   973) Bezier = 1, Sequential OffCurve 
02:53:14:0981 main.cpp(1045) main() : Glyph #  9 (  193,  1150) --> (  483,  1420) Ctrl = (  292,  1328) Bezier = 1, OnCurve
02:53:14:0981 main.cpp(1045) main() : Glyph # 10 (  483,  1420) --> (  884,  1491) Ctrl = (  632,  1491) Bezier = 1, OnCurve
02:53:14:0981 main.cpp(1074) main() : Glyph # 11 (  884,  1491) --> ( 1247,  1447) Ctrl = ( 1127,  1491) Bezier = 1, Sequential OffCurve 
02:53:14:0981 main.cpp(1074) main() : Glyph # 12 ( 1247,  1447) --> ( 1447,  1310) Ctrl = ( 1368,  1403) Bezier = 1, Sequential OffCurve 
02:53:14:0981 main.cpp(1045) main() : Glyph # 13 ( 1447,  1310) --> ( 1567,  1076) Ctrl = ( 1527,  1218) Bezier = 1, OnCurve
02:53:14:0981 main.cpp(1045) main() : Glyph # 14 ( 1567,  1076) --> ( 1130,   998) Ctrl = (    0,     0) Bezier = 0, OnCurve
02:53:14:0981 main.cpp(1074) main() : Glyph # 15 ( 1130,   998) --> ( 1038,  1125) Ctrl = ( 1103,  1081) Bezier = 1, Sequential OffCurve 
02:53:14:0985 main.cpp(1045) main() : Glyph # 16 ( 1038,  1125) --> (  874,  1169) Ctrl = (  974,  1169) Bezier = 1, OnCurve
02:53:14:0985 main.cpp(1074) main() : Glyph # 17 (  874,  1169) --> (  636,  1065) Ctrl = (  725,  1169) Bezier = 1, Sequential OffCurve 
02:53:14:0985 main.cpp(1045) main() : Glyph # 18 (  636,  1065) --> (  548,   738) Ctrl = (  548,   962) Bezier = 1, OnCurve
02:53:14:0985 main.cpp(1074) main() : Glyph # 19 (  548,   738) --> (  637,   398) Ctrl = (  548,   500) Bezier = 1, Sequential OffCurve 
02:53:14:0985 main.cpp(1045) main() : Glyph # 20 (  637,   398) --> (  887,   296) Ctrl = (  727,   296) Bezier = 1, OnCurve
02:53:14:0985 main.cpp(1074) main() : Glyph # 21 (  887,   296) --> ( 1032,   318) Ctrl = (  963,   296) Bezier = 1, Sequential OffCurve 
02:53:14:0985 main.cpp(1045) main() : Glyph # 22 ( 1032,   318) --> ( 1190,   393) Ctrl = ( 1101,   340) Bezier = 1, OnCurve
02:53:14:0985 main.cpp(1045) main() : Glyph # 23 ( 1190,   393) --> ( 1190,   531) Ctrl = (    0,     0) Bezier = 0, OnCurve
02:53:14:0985 main.cpp(1110) main() : Glyph # 24 ( 1190,   531) --> (  887,   531) Ctrl = (    0,     0) Bezier = 0, End
02:53:14:0985 main.cpp(1120) main() : number of glyph = 25