コード例 #1
0
ファイル: BCLIM.cs プロジェクト: cinnature/Kuriimu2
        public ImageInfo Load(Stream input)
        {
            var dataLength = (int)input.Length - (Nw4CHeaderSize + BclimHeaderSize);

            using (var br = new BinaryReaderX(input))
            {
                var textureData = br.ReadBytes(dataLength);

                _header      = br.ReadType <NW4CHeader>();
                br.ByteOrder = _header.ByteOrder;

                _textureHeader = br.ReadType <BclimHeader>();

                var imageInfo = new ImageInfo
                {
                    ImageData     = textureData,
                    ImageFormat   = _textureHeader.Format,
                    ImageSize     = new Size(_textureHeader.Width, _textureHeader.Height),
                    Configuration = new ImageConfiguration().
                                    RemapPixelsWith(size => new CTRSwizzle(_textureHeader.Width, _textureHeader.Height, _textureHeader.SwizzleTileMode, true))
                };

                return(imageInfo);
            }
        }
コード例 #2
0
        public ImageInfo Load(Stream input)
        {
            using var br = new BinaryReaderX(input, ByteOrder.BigEndian);

            // Read byte order
            input.Position = input.Length - 0x24;
            var byteOrder = br.ReadType <ByteOrder>();

            br.ByteOrder = byteOrder;

            // Read common header
            input.Position = input.Length - 0x28;
            _header        = br.ReadType <NW4CHeader>();

            switch (_header.magic)
            {
            case "CLIM":
                IsCtr = true;
                return(LoadBclim(br));

            case "FLIM":
                IsCtr = byteOrder == ByteOrder.LittleEndian;
                return(LoadBflim(br));

            default:
                throw new InvalidOperationException($"{_header.magic} is not supported.");
            }
        }