Be Bitmap Font 仕様書 ver.0.01 2000.6.6 1. 概略 Be Bitmap Font は、特定のポイント数で表示する際、True Type Font に代わって使われます。 Be Bitmap Font のみでは使えません。 また、File Type を "application/x-vnd.Be-bitmap-font" にしなければ無視されます。 実際のファイルは、次のように大きく3つの部分に分けられます。 header部 location-table部 glyph-data部 また、数値は全てbig-endianです。 2. header部 address type name 0000-0003 uint32 mark 0x7c42653b (Be Bitmap Font であることを示す) 0004-0007 uint32 size total size 0008-0009 uint16 ffnSize font-family-name size (最後のnullを含めない) 000a-000b uint16 fsnSize font-style-name size (最後のnullを含めない) 0016-0017 uint16 ltMax location-table に格納できる文字数 -1 0018-0019 uint16 point font-point (このポイント数の時にビットマップフォントが有効になる) 001a-001b uint16 0x0300 (意味不明) 0024- char[] familyName font-family-name (最後にnullが必要) - char[] styleName font-style-name (最後にnullが必要) 3. location-table部 文字コードと実際のデータへのポインタの対応を示す部分。 この表は、『文字数以上で最小の2の累乗』文字分確保される。 1文字分の内容は次の通り。 address type name 0000-0003 uint32 pointer pointer to glyph (ファイル先頭からのアドレス) 0004-0005 uint16 code character-code (もちろんunicode) 0006-0007 uint16 0x0000 (reserved?) 文字のテーブルへの格納は以下の計算式で求まる位置でなければいけない。 ((code>>2)xor(code<<3))&(ltMax) 実際は、location-tableの先頭位置に、この値に8bytes(1文字分)を掛けたものを 加えるとアドレスが求まる。 ただし、この計算式だと同じ位置にマッピングされるcodeが複数存在する。 もし、求めた位置がすでに使われていた場合は、1つ後ろにマッピングする。 また、location-tableエリアの最後に到達した場合はエリアの先頭にループする。 未使用領域は、pointer=0xffffffff、code=0x0000とする。 4. glyph-data部 1文字分の内容は次の通り。格納順はどうでもよい。 address type name 0000-0003 uint32 0x4996b438 (意味不明) 0004-0007 uint32 0x4996b440 (意味不明) 0008-0009 int16 left bitmapの左端x座標 (右側が正) 000a-000b int16 top bitmapの上端y座標 (下側が正) 000c-000d int16 right bitmapの右端x座標 (右側が正) 000e-000f int16 bottom bitmapの下端y座標 (下側が正) 0010-0013 float width 文字幅 (dot単位) 0014-0017 float height? 縦方向フォント用? 0018- uchar[] bitmap bitmap-data bitmap-dataは4bit単位(ただし0-7の8階調)の濃度データを並べたもの。 左上のドットが最初のバイトの上位とし、右側のドットへと進む。 横幅が奇数の場合は最後の4bitは0とする。 1行が終ると、同様に下側に進める。 bitmapはビットの存在する範囲だけでよいが、widthは画面に表示される際に占有する幅である。 空白文字の場合は、left=top=0x0000、right=bottom=0xffff、とし、bitmapは不要である。 5. 最後に一言 間違ってたらごめんね。 ------------------------------------------------------------- びぁ http://www1.plala.or.jp/hirotsu/