Esempio n. 1
0
        private static Set <string> GetDteGroups(FFTFont font, GenericCharMap charmap, IList <string> charset)
        {
            var        f      = new FFTFont(font.ToByteArray(), font.ToWidthsByteArray());
            List <int> widths = new List <int>(2200);

            f.Glyphs.ForEach(g => widths.Add(g.Width));
            return(TextUtilities.GetGroups(charmap, charset, widths));
        }
Esempio n. 2
0
        private static void GenerateFontBinPatches(
            IEnumerable <KeyValuePair <string, byte> > dteEncodings,
            FFTFont baseFont,
            IList <string> baseCharSet,
            out byte[] fontBytes,
            out byte[] widthBytes)
        {
            FFTFont font =
                new FFTFont(baseFont.ToByteArray(), baseFont.ToWidthsByteArray());
            IList <string> charSet = new List <string>(baseCharSet);

            foreach (var kvp in dteEncodings)
            {
                int[] chars    = new int[] { charSet.IndexOf(kvp.Key.Substring(0, 1)), charSet.IndexOf(kvp.Key.Substring(1, 1)) };
                int[] widths   = new int[] { font.Glyphs[chars[0]].Width, font.Glyphs[chars[1]].Width };
                int   newWidth = widths[0] + widths[1];

                font.Glyphs[kvp.Value].Width = (byte)newWidth;
                IList <FontColor> newPixels = font.Glyphs[kvp.Value].Pixels;
                for (int i = 0; i < newPixels.Count; i++)
                {
                    newPixels[i] = FontColor.Transparent;
                }

                const int fontHeight = 14;
                const int fontWidth  = 10;

                int offset = 0;
                for (int c = 0; c < chars.Length; c++)
                {
                    var pix = font.Glyphs[chars[c]].Pixels;

                    for (int x = 0; x < widths[c]; x++)
                    {
                        for (int y = 0; y < fontHeight; y++)
                        {
                            newPixels[y * fontWidth + x + offset] = pix[y * fontWidth + x];
                        }
                    }

                    offset += widths[c];
                }
            }

            fontBytes  = font.ToByteArray();
            widthBytes = font.ToWidthsByteArray();
        }
Esempio n. 3
0
        private static void GenerateFontBinPatches(
            IEnumerable <KeyValuePair <string, byte> > dteEncodings,
            FFTFont baseFont,
            IList <string> baseCharSet,
            out byte[] fontBytes,
            out byte[] widthBytes)
        {
            // Make a copy of the font
            FFTFont font =
                new FFTFont(baseFont.ToByteArray(), baseFont.ToWidthsByteArray());

            IList <string> charSet = new List <string>(baseCharSet);

            charSet.Add(" ");
            var myGlyphs = new List <Glyph>(font.Glyphs);

            myGlyphs.Add(new Glyph(0, 4, new byte[14 * 10 / 4]));

            foreach (var kvp in dteEncodings)
            {
                int[] chars =
                    new int[] {
                    charSet.IndexOf(kvp.Key.Substring(0, 1)),         // Find the index of the first character in the pair
                    charSet.IndexOf(kvp.Key.Substring(1, 1))          // Second character in the pair
                };
                int[] widths =
                    new int[] {
                    myGlyphs[chars[0]].Width,     // width of first char
                    myGlyphs[chars[1]].Width      // width of secont char
                };

                // The width of the concatenated character is the sum...
                int newWidth = widths[0] + widths[1];
                myGlyphs[kvp.Value].Width = (byte)newWidth;

                // Erase all the pixels of the character to replace
                IList <FontColor> newPixels = myGlyphs[kvp.Value].Pixels;
                for (int i = 0; i < newPixels.Count; i++)
                {
                    newPixels[i] = FontColor.Transparent;
                }

                const int fontHeight = 14;
                const int fontWidth  = 10;

                int offset = 0;
                // for each character in the pair...
                for (int c = 0; c < chars.Length; c++)
                {
                    var pix = myGlyphs[chars[c]].Pixels;

                    // ... copy the pixels to the concatenated character
                    for (int x = 0; x < widths[c]; x++)
                    {
                        for (int y = 0; y < fontHeight; y++)
                        {
                            newPixels[y * fontWidth + x + offset] = pix[y * fontWidth + x];
                        }
                    }

                    offset += widths[c];
                }
            }

            // Return the new font and widths arrays
            fontBytes  = font.ToByteArray();
            widthBytes = font.ToWidthsByteArray();
        }