コード例 #1
0
ファイル: DTE.cs プロジェクト: Wi150nZ/lioneditor
 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 );
 }
コード例 #2
0
ファイル: DTE.cs プロジェクト: Wi150nZ/lioneditor
        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();
        }
コード例 #3
0
ファイル: DTE.cs プロジェクト: Glain/FFTPatcher
        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();
        }