コード例 #1
0
        }                                                                  // 'GGPF'

        public override ImageMetaData ReadMetaData(Stream stream)
        {
            var header = new byte[0x24];

            if (header.Length != stream.Read(header, 0, header.Length))
            {
                return(null);
            }
            if (!Binary.AsciiEqual(header, 0, "GGPFAIKE"))
            {
                return(null);
            }
            var info = new GgpMetaData
            {
                Offset = LittleEndian.ToUInt32(header, 0x14),
                Length = LittleEndian.ToUInt32(header, 0x18),
            };

            for (int i = 0; i < 8; ++i)
            {
                info.Key[i] = (byte)(header[i] ^ header[i + 0xC]);
            }
            stream.Position = info.Offset;
            using (var png = new EncryptedStream(stream, info.Key, true))
            {
                var png_info = base.ReadMetaData(png);
                info.Width   = png_info.Width;
                info.Height  = png_info.Height;
                info.BPP     = png_info.BPP;
                info.OffsetX = png_info.OffsetX;
                info.OffsetY = png_info.OffsetY;
                return(info);
            }
        }
コード例 #2
0
        public override ImageMetaData ReadMetaData(IBinaryStream stream)
        {
            var header = stream.ReadHeader(0x24);

            if (!header.AsciiEqual("GGPFAIKE"))
            {
                return(null);
            }
            var info = new GgpMetaData
            {
                Offset = header.ToUInt32(0x14),
                Length = header.ToUInt32(0x18),
            };

            for (int i = 0; i < 8; ++i)
            {
                info.Key[i] = (byte)(header[i] ^ header[i + 0xC]);
            }
            stream.Position = info.Offset;
            using (var enc = new EncryptedStream(stream.AsStream, info.Key, true))
                using (var png = new BinaryStream(enc, stream.Name))
                {
                    var png_info = base.ReadMetaData(png);
                    info.Width   = png_info.Width;
                    info.Height  = png_info.Height;
                    info.BPP     = png_info.BPP;
                    info.OffsetX = png_info.OffsetX;
                    info.OffsetY = png_info.OffsetY;
                    return(info);
                }
        }
コード例 #3
0
        public override ImageData Read(IBinaryStream file, ImageMetaData info)
        {
            var meta = (GgpMetaData)info;

            using (var input = new StreamRegion(file.AsStream, meta.Offset, meta.Length, true))
                using (var enc = new EncryptedStream(input, meta.Key))
                    using (var png = new BinaryStream(enc, file.Name))
                        return(base.Read(png, info));
        }
コード例 #4
0
        public override ImageData Read(Stream file, ImageMetaData info)
        {
            var meta = info as GgpMetaData;

            if (null == meta)
            {
                throw new ArgumentException("GgpFormat.Read should be supplied with GgpMetaData", "info");
            }
            using (var input = new StreamRegion(file, meta.Offset, meta.Length, true))
                using (var png = new EncryptedStream(input, meta.Key, true))
                    return(base.Read(png, info));
        }