Ejemplo n.º 1
0
        public IList <ImageInfo> Load(Stream input, G1tPlatform platform)
        {
            _platform = platform;

            using var br = new BinaryReaderX(input);

            // Set endianess
            var magic = br.ReadString(4);

            br.ByteOrder = magic == "GT1G" ? ByteOrder.LittleEndian : ByteOrder.BigEndian;

            // Read header
            input.Position = 0;
            _header        = br.ReadType <G1tHeader>();

            // Read unknown region
            _unkRegion = br.ReadMultiple <int>(_header.texCount);

            // Read offsets
            input.Position = _header.dataOffset;
            var offsets = br.ReadMultiple <int>(_header.texCount);

            // Read images
            var result = new List <ImageInfo>();

            foreach (var offset in offsets)
            {
                // Read entry
                input.Position = _header.dataOffset + offset;
                var entry = br.ReadType <G1tEntry>();

                // Read image data
                var dataSize  = entry.Width * entry.Height * G1tSupport.GetBitDepth(entry.format, platform) / 8;
                var imageData = br.ReadBytes(dataSize);

                // Read mips
                var mips = new List <byte[]>();
                for (var i = 1; i < entry.MipCount; i++)
                {
                    dataSize = (entry.Width >> i) * (entry.Height >> i) * G1tSupport.GetBitDepth(entry.format, platform) / 8;
                    mips.Add(br.ReadBytes(dataSize));
                }

                // Create image info
                var imageInfo = new G1tImageInfo(imageData, entry.format, new Size(entry.Width, entry.Height), entry)
                {
                    MipMapData = mips
                };

                imageInfo.RemapPixels.With(context => G1tSupport.GetSwizzle(context, entry.format, platform));
                imageInfo.PadSize.ToPowerOfTwo();

                result.Add(imageInfo);
            }

            return(result);
        }
Ejemplo n.º 2
0
        public async Task Load(IFileSystem fileSystem, UPath filePath, LoadContext loadContext)
        {
            var fileStream = await fileSystem.OpenFileAsync(filePath);

            var platform = G1tSupport.DeterminePlatform(fileStream, loadContext.DialogManager);

            EncodingDefinition = G1tSupport.GetEncodingDefinition(platform);

            fileStream.Position = 0;
            Images = _img.Load(fileStream, platform).Select(x => new KanvasImage(EncodingDefinition, x)).ToArray();
        }