예제 #1
0
        public Sheet(EndianBinaryReader reader)
        {
            Images = new List <byte[]>();

            reader.Skip(4);

            FirstCode = reader.ReadInt16();
            LastCode  = reader.ReadInt16();

            CellWidth  = reader.ReadInt16();
            CellHeight = reader.ReadInt16();

            int total_sheet_size = reader.ReadInt32();

            TextureFormat = (BinaryTextureImage.TextureFormats)reader.ReadInt16();

            RowCount    = reader.ReadInt16();
            ColumnCount = reader.ReadInt16();

            SheetWidth  = reader.ReadInt16();
            SheetHeight = reader.ReadInt16();

            reader.SkipInt16();

            int num_sheets = (LastCode - FirstCode) / (RowCount * ColumnCount) + 1;

            for (int i = 0; i < num_sheets; i++)
            {
                Images.Add(BinaryTextureImage.DecodeData(reader, (uint)SheetWidth, (uint)SheetHeight, TextureFormat));
            }
        }
예제 #2
0
        public void SaveImage(int index, string directory)
        {
            BinaryTextureImage aa = new BinaryTextureImage();

            for (int i = 0; i < Images.Count; i++)
            {
                aa.SaveImageToDisk(Path.Combine(directory, $"sheet_{ index }_{ i }.png"), Images[i], SheetWidth, SheetHeight);
            }
        }
예제 #3
0
        public void LoadImages(int index, string directory)
        {
            IEnumerable <string> files = Directory.EnumerateFiles(directory, $"sheet_{ index }_*.png");

            for (int i = 0; i < files.Count(); i++)
            {
                string img_name = files.ElementAt(i);
                Bitmap img      = new Bitmap(img_name);

                Images.Add(BinaryTextureImage.EncodeData(img, (uint)SheetWidth, (uint)SheetHeight, TextureFormat));
            }
        }
        static void Main(string[] args)
        {
            font fnt;

            fontPages pages;
            fontChars chars;

            byte[] finalSheetArray;

            List<byte> finalCompiledSheet = new List<byte>();

            using (FileStream stream = new FileStream(@"C:\Program Files (x86)\SZS Tools\TestFont\TestFont.fnt", FileMode.Open))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(font));
                fnt = (font)serializer.Deserialize(stream);

                pages = (fontPages)fnt.Items[2];
                chars = (fontChars)fnt.Items[3];

                List<Bitmap> alignedGlyphSheets = new List<Bitmap>();

                int charCount = 0;

                while (charCount != chars.count)
                {
                    Bitmap alignedGlyphSheet = new Bitmap(160, 160);
                    int baseXPixel = 0;
                    int baseYPixel = 0;
                    int numCharsBlockY = 0;
                    int numCharsBlockX = 0;

                    for (int alignedY = 0; alignedY < alignedGlyphSheet.Height; alignedY++)
                    {
                        for (int alignedX = 0; alignedX < alignedGlyphSheet.Width; alignedX++)
                        {
                            alignedGlyphSheet.SetPixel(alignedX, alignedY, Color.Black);
                        }
                    }

                    for (int glyphBlockY = 0; glyphBlockY < 5; glyphBlockY++)
                    {
                        if (charCount >= chars.count)
                            break;

                        baseXPixel = 0;

                        for (int glyphBlockX = 0; glyphBlockX < 5; glyphBlockX++)
                        {
                            using (FileStream glyphSheet = new FileStream(@"C:\Program Files (x86)\SZS Tools\TestFont\" + pages.page[chars.@char[charCount].page].file, FileMode.Open))
                            {

                                using (Bitmap sourceGlyphSheet = new Bitmap(glyphSheet))
                                {
                                    for (int y = 0; y < chars.@char[charCount].height; y++)
                                    {
                                        for (int x = 0; x < chars.@char[charCount].width; x++)
                                        {
                                            int charOffsetX = 32 / 2 - chars.@char[charCount].width / 2;
                                            int charOffsetY = 32 / 2 - chars.@char[charCount].height / 2;

                                            alignedGlyphSheet.SetPixel(baseXPixel + charOffsetX + x, baseYPixel + charOffsetY + y,
                                                sourceGlyphSheet.GetPixel(chars.@char[charCount].x + x,
                                                chars.@char[charCount].y + y));
                                        }
                                    }

                                    charCount++;

                                    if (charCount >= chars.count)
                                        break;
                                }
                            }

                            numCharsBlockX++;

                            baseXPixel += 32;
                        }

                        numCharsBlockY++;

                        baseYPixel += 32;
                    }

                    alignedGlyphSheets.Add(alignedGlyphSheet);

                    alignedGlyphSheet.Save(@"C:\Program Files (x86)\SZS Tools\TestFont\alignedSheet_at_" + charCount + ".bmp");
                }

                foreach (Bitmap bmp in alignedGlyphSheets)
                {
                    finalCompiledSheet.AddRange(BinaryTextureImage.EncodeData(bmp, (uint)bmp.Width, (uint)bmp.Height, BinaryTextureImage.TextureFormats.I4));
                }

                finalSheetArray = BinaryTextureImage.DecodeData(new EndianBinaryReader(finalCompiledSheet.ToArray(), Endian.Big), 160, 160 * 4, BinaryTextureImage.TextureFormats.I4);

                BinaryTextureImage tex = new BinaryTextureImage();

                tex.SaveImageToDisk(@"C:\Program Files (x86)\SZS Tools\TestFont\finalSheetTest.png", finalSheetArray, 160, 160 * 4);
            }

            Bitmap pngOrig = new Bitmap(@"C:\Program Files (x86)\SZS Tools\fontres.arc_dir\fontres\rock_24_20_4i_usa_noheader.bmp");

            byte[] origIdea = BinaryTextureImage.EncodeData(pngOrig, 128, 1152, BinaryTextureImage.TextureFormats.I4);

            using (EndianBinaryWriter writ = new EndianBinaryWriter(new FileStream(@"C:\Program Files (x86)\SZS Tools\TestFont\testOutput.bin", FileMode.Create), Endian.Big))
            {
                writ.Write(origIdea);
            }

            using(EndianBinaryWriter writer = new EndianBinaryWriter(new FileStream(@"C:\Program Files (x86)\SZS Tools\TestFont\test.bfn",FileMode.Create), Endian.Big))
            {
                WriteBFN(writer, chars, finalCompiledSheet.ToArray());
            }
        }