フォント TrueType 構造解析 新しいページはコチラ
提供: yonewiki
(→構造) |
(→構造) |
||
119行: | 119行: | ||
例えばWindowsのImpactというフォントだと以下のようなTAGテーブルになっています。見やすいようにTAGテーブルのポジションの値で昇順にしました。あとCheckSumは実際に計算した値も記載しています。もちろんtableに書かれていた値と計算した値は一致しています。 | 例えばWindowsのImpactというフォントだと以下のようなTAGテーブルになっています。見やすいようにTAGテーブルのポジションの値で昇順にしました。あとCheckSumは実際に計算した値も記載しています。もちろんtableに書かれていた値と計算した値は一致しています。 | ||
− | |||
<table style = "width: 100 ; text-align: left; border-collapse: collapse; border-spacing: 0; "> | <table style = "width: 100 ; text-align: left; border-collapse: collapse; border-spacing: 0; "> | ||
290行: | 289行: | ||
</tr> | </tr> | ||
</table> | </table> | ||
+ | |||
+ | |||
+ | 各tagテーブルの本体テーブルは4の倍数のバイト数の長さになるように調整されていて、実際の長さがLengthですが、Lengthが4の倍数になっていない場合は、そうなるように各byte値が00値で埋められます。 | ||
+ | |||
+ | このような構造なので、フォントファイル自体は4の倍数のバイト数になっています。ファイルの先頭から4バイトづつ読み込んで、4バイトをunsigned int値として、足し算を繰り返す操作によって、チェックサムが計算できます。フォントファイル自体のチェックサムは全てのフォントファイルで0xB1B0AFBAになります。これは必須tagのheadのadjustment CheckSumという値で0xB1B0AFBAになるように調整されています。adjustment CheckSumはheadの3番目の32byteの値です。したがって(adjustment CheckSumを除いたCheckSum)+(必須tagのheadのadjustment CheckSum) = 0xB1B0AFBA となります。テーブルごとのチェックサムはテーブルのオフセットポジションから、次のテーブルまでを足し算をした値です。チェックサムの計算を繰り返すと、unsigned intの32byteという容量からはなんども桁あふれが発生しますが、どんどん切り捨てて計算を繰り返します。tag名がheadのテーブルだけはadjustment CheckSumを無視したチェックサムを求めます。 | ||