Example #1
0
        private static fdAT Read_fdAT(string png, int i)
        {
            BinaryReader br   = new BinaryReader(new FileStream(png, FileMode.Open));
            fdAT         fdat = new fdAT();

            fdat.id = Encoding.ASCII.GetBytes(new char[] { 'f', 'd', 'A', 'T' });
            fdat.sequence_number = BitConverter.GetBytes(i).Reverse().ToArray();

            bool   encontrado = false;
            string c          = "\0\0\0\0";

            while (!encontrado)
            {
                c = c.Remove(0, 1);

                c += (char)br.ReadByte();
                if (c == "IDAT")
                {
                    encontrado = true;
                }
            }

            br.BaseStream.Position -= 8;
            int length = BitConverter.ToInt32(br.ReadBytes(4).Reverse().ToArray(), 0);

            fdat.length             = BitConverter.GetBytes(length + 4).Reverse().ToArray();
            br.BaseStream.Position += 4;
            fdat.data = br.ReadBytes(length);
            List <Byte> stream = new List <byte>();

            stream.AddRange(fdat.id);
            stream.AddRange(fdat.sequence_number);
            stream.AddRange(fdat.data);
            fdat.crc = Helper.CRC32.Calculate(stream.ToArray());

            br.Close();
            return(fdat);
        }
Example #2
0
File: APNG.cs Project: MetLob/tinke
        private static void Write(string apng, byte[] signature, IHDR ihdr, acTL actl, byte[] idat,
            fcTL[] fctl, fdAT[] fdat, IEND iend)
        {
            BinaryWriter bw = new BinaryWriter(new FileStream(apng, FileMode.Create));

            bw.Write(signature);

            bw.Write(ihdr.length);
            bw.Write(ihdr.id);
            bw.Write(ihdr.width);
            bw.Write(ihdr.height);
            bw.Write(ihdr.depth);
            bw.Write(ihdr.colour_type);
            bw.Write(ihdr.compression);
            bw.Write(ihdr.filter);
            bw.Write(ihdr.interlace);
            bw.Write(ihdr.crc);

            bw.Write(actl.length);
            bw.Write(actl.id);
            bw.Write(actl.num_frames);
            bw.Write(actl.num_plays);
            bw.Write(actl.crc);

            bw.Write(fctl[0].length);
            bw.Write(fctl[0].id);
            bw.Write(fctl[0].sequence_numer);
            bw.Write(fctl[0].width);
            bw.Write(fctl[0].height);
            bw.Write(fctl[0].x_offset);
            bw.Write(fctl[0].y_offset);
            bw.Write(fctl[0].delay_num);
            bw.Write(fctl[0].delay_den);
            bw.Write(fctl[0].dispose_op);
            bw.Write(fctl[0].blend_op);
            bw.Write(fctl[0].crc);

            bw.Write(idat);

            for (int i = 0; i < fdat.Length; i++)
            {
                bw.Write(fctl[i + 1].length);
                bw.Write(fctl[i + 1].id);
                bw.Write(fctl[i + 1].sequence_numer);
                bw.Write(fctl[i + 1].width);
                bw.Write(fctl[i + 1].height);
                bw.Write(fctl[i + 1].x_offset);
                bw.Write(fctl[i + 1].y_offset);
                bw.Write(fctl[i + 1].delay_num);
                bw.Write(fctl[i + 1].delay_den);
                bw.Write(fctl[i + 1].dispose_op);
                bw.Write(fctl[i + 1].blend_op);
                bw.Write(fctl[i + 1].crc);

                bw.Write(fdat[i].length);
                bw.Write(fdat[i].id);
                bw.Write(fdat[i].sequence_number);
                bw.Write(fdat[i].data);
                bw.Write(fdat[i].crc);
            }

            bw.Write(iend.length);
            bw.Write(iend.id);
            bw.Write(iend.crc);

            bw.Flush();
            bw.Close();
        }
Example #3
0
File: APNG.cs Project: MetLob/tinke
        private static fdAT Read_fdAT(string png, int i)
        {
            BinaryReader br = new BinaryReader(new FileStream(png, FileMode.Open));
            fdAT fdat = new fdAT();

            fdat.id = Encoding.ASCII.GetBytes(new char[] { 'f', 'd', 'A', 'T' });
            fdat.sequence_number = BitConverter.GetBytes(i).Reverse().ToArray();

            bool encontrado = false;
            string c = "\0\0\0\0";
            while (!encontrado)
            {
                c = c.Remove(0, 1);

                c += (char)br.ReadByte();
                if (c == "IDAT")
                    encontrado = true;
            }

            br.BaseStream.Position -= 8;
            int length = BitConverter.ToInt32(br.ReadBytes(4).Reverse().ToArray(), 0);
            fdat.length = BitConverter.GetBytes(length + 4).Reverse().ToArray();
            br.BaseStream.Position += 4;
            fdat.data = br.ReadBytes(length);
            List<Byte> stream = new List<byte>();
            stream.AddRange(fdat.id);
            stream.AddRange(fdat.sequence_number);
            stream.AddRange(fdat.data);
            fdat.crc = Helper.CRC32.Calculate(stream.ToArray());

            br.Close();
            return fdat;
        }