public FFNT(byte[] Data) { EndianBinaryReader er = new EndianBinaryReader(new MemoryStream(Data), Endianness.BigEndian); Header = new FFNTHeader(er); FontInfo = new FINF(er); er.BaseStream.Position = FontInfo.TGLPOffset - 8; TextureGlyph = new TGLP(er); List<CWDH> tmp = new List<CWDH>(); er.BaseStream.Position = FontInfo.CWDHOffset - 8; CWDH Last; do { Last = new CWDH(er); tmp.Add(Last); if (Last.NextCWDHOffset != 0) er.BaseStream.Position = Last.NextCWDHOffset - 8; } while (Last.NextCWDHOffset != 0); CharWidths = tmp.ToArray(); List<CMAP> tmp2 = new List<CMAP>(); er.BaseStream.Position = FontInfo.CMAPOffset - 8; CMAP Last2; do { Last2 = new CMAP(er); tmp2.Add(Last2); if (Last2.NextCMAPOffset != 0) er.BaseStream.Position = Last2.NextCMAPOffset - 8; } while (Last2.NextCMAPOffset != 0); CharMaps = tmp2.ToArray(); er.Close(); }
public CFNT(byte[] Data) { EndianBinaryReader er = new EndianBinaryReader(new MemoryStream(Data), Endianness.LittleEndian); try { Header = new CFNTHeader(er); FontInfo = new FINF(er); er.BaseStream.Position = FontInfo.TGLPOffset - 8; TextureGlyph = new TGLP(er); List <CWDH> tmp = new List <CWDH>(); er.BaseStream.Position = FontInfo.CWDHOffset - 8; CWDH Last; do { Last = new CWDH(er); tmp.Add(Last); if (Last.NextCWDHOffset != 0) { er.BaseStream.Position = Last.NextCWDHOffset - 8; } }while (Last.NextCWDHOffset != 0); CharWidths = tmp.ToArray(); List <CMAP> tmp2 = new List <CMAP>(); er.BaseStream.Position = FontInfo.CMAPOffset - 8; CMAP Last2; do { Last2 = new CMAP(er); tmp2.Add(Last2); if (Last2.NextCMAPOffset != 0) { er.BaseStream.Position = Last2.NextCMAPOffset - 8; } }while (Last2.NextCMAPOffset != 0); CharMaps = tmp2.ToArray(); } finally { er.Close(); } }