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); } }
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."); } }