public CharacterExtractor(Xml.BmFont font, System.Drawing.Bitmap bitmap) { this.font = font; this.bitmap = bitmap; }
static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine("Usage: bmfont2cs example.fnt"); Environment.Exit(1); } var fileName = args[0]; if (!File.Exists(fileName)) { Console.WriteLine("Unable to find file '{0}'", fileName); Environment.Exit(2); } FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); TextReader reader = new StreamReader(fileStream); Xml.BmFont font = null; try { font = Xml.BmFont.Deserialize(reader); } catch (Exception ex) { Console.WriteLine(ex.Message); Environment.Exit(3); } for (int pageIndex = 0; pageIndex < font.Pages.Length; pageIndex++) { var output = new StringBuilder(); var className = string.Format(classTemplate, font.Info.Face, pageIndex == 0 ? "" : pageIndex.ToString()); if (File.Exists(font.Pages[pageIndex].File)) { var bitmap = new Bitmap(font.Pages[pageIndex].File); output.AppendFormat(beginningTemplate, className, font.Info.Size, font.Common.LineHeight); var extractor = new CharacterExtractor(font, bitmap); var asciiIndexes = font.Chars.Characters.Select(c => c.Id).Where(num => num >= 32 && num <= 127).OrderBy(num => num).ToList(); foreach (var asciiIndex in asciiIndexes) { var character = ( char )( byte )asciiIndex; var boolMap = extractor.GetCharacter(character, 0, 3); output.AppendFormat(OutputGenerator.AsComments("\t\t\t\t", boolMap)); output.AppendFormat("\t\t\t{{ '{0}', new byte[][] {{\n", (character == '\'' ? "\\'" : character.ToString())); output.Append(OutputGenerator.AsCSharpByteArray("\t\t\t\t", OutputGenerator.As1BitPageFormat(boolMap))); output.Append("\t\t\t}},\n"); } output.AppendFormat(middleTemplate, className); output.Append(OutputGenerator.AsKerningArray("\t\t\t", asciiIndexes, font.Kernings)); output.AppendFormat(endTemplate); File.WriteAllText(className + ".cs", output.ToString()); } else { Console.WriteLine("cannot find {0}", font.Pages[pageIndex].File); } } Console.WriteLine("done"); Environment.Exit(0); }