コード例 #1
0
ファイル: ImageG00.cs プロジェクト: zxc120/GARbro
 public override ImageData Read(IBinaryStream stream, ImageMetaData info)
 {
     using (var reader = new G00Reader(stream, (G00MetaData)info))
     {
         reader.Unpack();
         return(ImageData.Create(info, reader.Format, reader.Palette, reader.Data));
     }
 }
コード例 #2
0
ファイル: ArcG00.cs プロジェクト: zxc120/GARbro
        public override ArcFile TryOpen(ArcView file)
        {
            if (!file.Name.HasExtension(".g00"))
            {
                return(null);
            }
            if (file.View.ReadByte(0) != 2)
            {
                return(null);
            }
            uint width  = file.View.ReadUInt16(1);
            uint height = file.View.ReadUInt16(3);

            if (0 == width || width > 0x8000 || 0 == height || height > 0x8000)
            {
                return(null);
            }
            int count = file.View.ReadInt16(5);

            if (count <= 1 || count > 0x1000)
            {
                return(null);
            }
            var base_name = Path.GetFileNameWithoutExtension(file.Name);

            uint index_offset = 9;
            var  dir          = new List <Entry> (count);

            for (int i = 0; i < count; ++i)
            {
                var entry = new G00Entry {
                    Name = string.Format("{0}#{1:D3}", base_name, i),
                    X    = file.View.ReadInt32(index_offset),
                    Y    = file.View.ReadInt32(index_offset + 4),
                };
                dir.Add(entry);
                index_offset += 0x18;
            }
            byte[] bitmap;
            using (var input = file.CreateStream(index_offset))
                bitmap = G00Reader.LzDecompress(input, 2, 1);

            using (var input = new BinMemoryStream(bitmap))
            {
                if (input.ReadInt32() != count)
                {
                    return(null);
                }
                for (int i = 0; i < count; ++i)
                {
                    dir[i].Offset = input.ReadUInt32();
                    dir[i].Size   = input.ReadUInt32();
                }
            }
            dir = dir.Where(e => e.Size != 0).ToList();
            if (0 == dir.Count)
            {
                return(null);
            }
            var info = new ImageMetaData {
                Width = width, Height = height, BPP = 32
            };

            return(new G00Archive(file, this, dir, info, bitmap));
        }