public CharacterExtractor(Xml.BmFont font, System.Drawing.Bitmap bitmap)
 {
     this.font   = font;
     this.bitmap = bitmap;
 }
示例#2
0
        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);
        }