Esempio n. 1
0
        private byte[] _serialize(BniFormat bni)
        {
            byte[] bytes;
            using (var ms = new MemoryStream())
            {
                using (var bw = new BinaryWriter(ms))
                {
                    bw.Write(bni.HeaderLength);
                    bw.Write(bni.BniVersion);
                    bw.Write(bni.Unused);
                    bw.Write(bni.NumIcons);
                    bw.Write(bni.DataStart);

                    foreach (var i in bni.Icons)
                    {
                        bw.Write(i.Flag);
                        bw.Write(i.Width);
                        bw.Write(i.Height);
                        if (i.Tag != null && i.Tag.Length == 4)
                        {
                            // reverse tag and convert it to chars to exclude 0x04 byte at the beginning of normal string
                            bw.Write(reverse(i.Tag).ToCharArray());
                        }
                        bw.Write(i.Id);
                    }

                    bw.Write(bni.Data);
                }
                bytes = ms.GetBuffer();
            }
            return(bytes);
        }
Esempio n. 2
0
        public void Save(IconItem[] icons, byte[] data, string outFileName)
        {
            // sort items by flag
            sortIcons(ref icons);

            var bni = new BniFormat()
            {
                HeaderLength = 0x10,
                BniVersion   = 0x01,
                NumIcons     = icons.Length,
                Icons        = icons,
                Data         = data
            };

            // calc data start offset
            int offset = 16;

            foreach (IconItem i in icons)
            {
                offset += 16;
                if (i.Tag != null && i.Tag.Length == 4)
                {
                    offset += 4;
                }
            }
            bni.DataStart = offset;

            var bytes = _serialize(bni);

            File.WriteAllBytes(outFileName, bytes);
        }
Esempio n. 3
0
        private BniFormat _deserialize(string fileName)
        {
            var bni = new BniFormat();

            using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                using (var br = new BinaryReader(fs))
                {
                    bni.HeaderLength = br.ReadInt32();
                    bni.BniVersion   = br.ReadInt16();
                    bni.Unused       = br.ReadInt16();
                    bni.NumIcons     = br.ReadInt32();
                    bni.DataStart    = br.ReadInt32();

                    bni.Icons = new IconItem[bni.NumIcons];

                    for (int i = 0; i < bni.NumIcons; i++)
                    {
                        bni.Icons[i].Flag   = br.ReadInt32();
                        bni.Icons[i].Width  = br.ReadInt32();
                        bni.Icons[i].Height = br.ReadInt32();

                        if (br.PeekChar() > 0)
                        {
                            bni.Icons[i].Tag = reverse(Encoding.ASCII.GetString(br.ReadBytes(4)));
                        }
                        bni.Icons[i].Id = br.ReadInt32();
                    }

                    bni.Data = br.ReadBytes((int)br.BaseStream.Length - bni.NumIcons);
                }
            }
            return(bni);
        }
Esempio n. 4
0
        public void Save(IconItem[] icons, byte[] data, string outFileName)
        {
            // sort items by flag
            sortIcons(ref icons);

            var bni = new BniFormat()
            {
                HeaderLength = 0x10,
                BniVersion = 0x01,
                NumIcons = icons.Length,
                Icons = icons,
                Data = data
            };

            // calc data start offset
            int offset = 16;
            foreach (IconItem i in icons)
            {
                offset += 16;
                if (i.Tag != null && i.Tag.Length == 4)
                    offset += 4;
            }
            bni.DataStart = offset;

            var bytes = _serialize(bni);

            File.WriteAllBytes(outFileName, bytes);
        }
Esempio n. 5
0
        private byte[] _serialize(BniFormat bni)
        {
            byte[] bytes;
            using (var ms = new MemoryStream())
            {
                using (var bw = new BinaryWriter(ms))
                {
                    bw.Write(bni.HeaderLength);
                    bw.Write(bni.BniVersion);
                    bw.Write(bni.Unused);
                    bw.Write(bni.NumIcons);
                    bw.Write(bni.DataStart);

                    foreach (var i in bni.Icons)
                    {
                        bw.Write(i.Flag);
                        bw.Write(i.Width);
                        bw.Write(i.Height);
                        if (i.Tag != null && i.Tag.Length == 4)
                            // reverse tag and convert it to chars to exclude 0x04 byte at the beginning of normal string
                            bw.Write(reverse(i.Tag).ToCharArray());
                        bw.Write(i.Id);
                    }

                    bw.Write(bni.Data);
                }
                bytes = ms.GetBuffer();
            }
            return bytes;
        }
Esempio n. 6
0
        private BniFormat _deserialize(string fileName)
        {
            var bni = new BniFormat();
            using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                using (var br = new BinaryReader(fs))
                {
                    bni.HeaderLength = br.ReadInt32();
                    bni.BniVersion = br.ReadInt16();
                    bni.Unused = br.ReadInt16();
                    bni.NumIcons = br.ReadInt32();
                    bni.DataStart = br.ReadInt32();

                    bni.Icons = new IconItem[bni.NumIcons];

                    for (int i = 0; i < bni.NumIcons; i++)
                    {
                        bni.Icons[i].Flag = br.ReadInt32();
                        bni.Icons[i].Width = br.ReadInt32();
                        bni.Icons[i].Height = br.ReadInt32();

                        if (br.PeekChar() > 0)
                        {
                            bni.Icons[i].Tag = reverse(Encoding.ASCII.GetString(br.ReadBytes(4)));
                        }
                        bni.Icons[i].Id = br.ReadInt32();

                    }

                    bni.Data = br.ReadBytes((int)br.BaseStream.Length - bni.NumIcons);
                }
            }
            return bni;
        }