private CrpHeader parseHeader() { CrpHeader output = new CrpHeader(); output.formatVersion = reader.ReadUInt16(); output.packageName = reader.ReadString(); string encryptedAuthor = reader.ReadString(); if (encryptedAuthor.Length > 0) { output.authorName = CryptoUtils.Decrypt(encryptedAuthor); } else { output.authorName = "Unknown"; } output.pkgVersion = reader.ReadUInt32(); output.mainAssetName = reader.ReadString(); output.numAssets = reader.ReadInt32(); output.contentBeginIndex = reader.ReadInt64(); output.assets = new List <CrpAssetInfoHeader>(); for (int i = 0; i < output.numAssets; i++) { CrpAssetInfoHeader info = new CrpAssetInfoHeader(); info.assetName = reader.ReadString(); info.assetChecksum = reader.ReadString(); info.assetType = (Consts.AssetTypeMapping)(reader.ReadInt32()); if (info.assetType == Consts.AssetTypeMapping.userLut) { output.isLut = true; } info.assetOffsetBegin = reader.ReadInt64(); info.assetSize = reader.ReadInt64(); output.assets.Add(info); } return(output); }
/// <summary> /// Special Parser for LUTs, we're only grabbing the headerless PNG file (for now) /// </summary> /// <param name="header"></param> /// <param name="saveFiles"></param> /// <param name="isVerbose"></param> private void parseLut(CrpHeader header, bool saveFiles, bool isVerbose) { //Find the first instance of data(PNG file) CrpAssetInfoHeader info = header.assets.Find(asset => asset.assetName.Contains(Consts.DATA_EXTENSION)); //Generate a name for the file string fileName = string.Format("{0}.png", StrUtils.limitStr(info.assetName), info.assetType.ToString()); //Should be unnessecary in current version(stream pointer should already be at start of file), //but advance stream pointer to file position reader.BaseStream.Seek(info.assetOffsetBegin, SeekOrigin.Current); //Read file and deal with it as apporiate. MagickImage retVal = ImgParser.parseImgFile(reader, (uint)info.assetSize); if (isVerbose) { Console.WriteLine("Read image file {0}", fileName); } if (saveFiles) { retVal.Write(fileName); } }