Example #1
0
        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);
        }
Example #2
0
        /// <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);
            }
        }