예제 #1
0
파일: ImageABC.cs 프로젝트: zxc120/GARbro
        public override ImageData Read(IBinaryStream file, ImageMetaData info)
        {
            var meta = (AbcMetaData)info;

            using (var reader = new AbcDecoder(file.AsStream, meta.UnpackedSize))
            {
                var data = reader.Unpack();
                using (var input = new BinMemoryStream(data))
                    return(meta.SourceFormat.Read(input, meta.SourceInfo));
            }
        }
예제 #2
0
파일: ImageABC.cs 프로젝트: zxc120/GARbro
        public override ImageMetaData ReadMetaData(IBinaryStream file)
        {
            int unpacked_size = file.ReadInt32();

            if (unpacked_size < MinUnpackedSize || unpacked_size > MaxUnpackedSize)
            {
                return(null);
            }
            uint signature = file.ReadUInt32();

            if ((signature & 0xFFFF) != 0x1321 && signature != 0x620A1122)
            {
                return(null);
            }
            using (var reader = new AbcDecoder(file.AsStream, Math.Min(0x6C, unpacked_size)))
            {
                var         data = reader.Unpack();
                ImageFormat format;
                if (data.AsciiEqual(0, "BM"))
                {
                    format = Bmp;
                }
                else if (data.AsciiEqual(0, "DDS "))
                {
                    format = s_DdsFormat.Value;
                }
                else
                {
                    return(null);
                }
                using (var input = new BinMemoryStream(data))
                {
                    var info = format.ReadMetaData(input);
                    if (null == info)
                    {
                        return(null);
                    }
                    return(new AbcMetaData {
                        Width = info.Width,
                        Height = info.Height,
                        BPP = info.BPP,
                        UnpackedSize = unpacked_size,
                        SourceFormat = format,
                        SourceInfo = info,
                    });
                }
            }
        }