//============================================================ // <T>序列化资源信息。</T> // // @param output 流信息 //============================================================ public virtual void SerializeCompress(IOutput output, FXmlNode xconfig) { // 写入编号 output.WriteString(_code); //............................................................ output.WriteInt16((short)_resources.Count); foreach (FDrResource resource in _resources) { resource.Open(); // 序列化资源 FByteStream data = new FByteStream(); FCompressFile stream = new FCompressFile(); resource.Serialize(stream); stream.Compress(data); // 输出资源 output.WriteInt32(data.Length); output.WriteBytes(data.Memory, 0, data.Length); //// 创建资源设置 //if (null != xconfig) { // FXmlNode xresources = xconfig.Sync("Resources"); // FXmlNode xresource = xresources.CreateNode("Resource"); // xresource.Set("code", resource.Code); // xresource.Set("label", resource.Label); // xresource.Set("type_name", resource.TypeName); // xresource.Set("size", stream.Length); // xresource.Set("size_compress", data.Length); //} } }
//============================================================ // <T>根据指定模式导出数据到文件。</T> // // @param modeCd 导出模式 // @param fileName 文件名称 //============================================================ public void ExportFile(ERsExportMode modeCd, string fileName) { FCompressFile file = new FCompressFile(); Serialize(file); file.Compress(fileName); _logger.Debug(this, "Export", "Export model success. (file_name={0})", fileName); }
//============================================================ // <T>序列化内部数据到输出流中。</T> // // @param output 输出流 //============================================================ public byte[] CompressBytes() { Open(); FByteStream stream = new FByteStream(); FCompressFile compress = new FCompressFile(); Serialize(compress); compress.Compress(stream); return(stream.ToArray()); }
//============================================================ // <T>导出处理。</T> //============================================================ public void Export() { Open(); // 存储文件 string exportFileName = RContent3dManager.MaterialConsole.ExportDirectory + "\\mt_" + Code + ".swf"; FCompressFile file = new FCompressFile(); Serialize(file); file.Compress(exportFileName); _logger.Debug(this, "Export", "Export material success. (file_name={0})", exportFileName); Dispose(); }
//============================================================ // <T>序列化数据。</T> //============================================================ public void ExportFile(string fileName) { // 打开 Open(); // 压缩文件 FCompressFile file = new FCompressFile(); Serialize(file); file.Compress(_exportFileName); _logger.Debug(this, "Export", "Export texture success. (file_name={0})", _exportFileName); // 释放资源 Dispose(); }
//============================================================ // <T>序列化资源信息。</T> // // @param output 流信息 //============================================================ public virtual void Serialize(IOutput output) { // 写入编号 output.WriteString(_code); //............................................................ output.WriteInt16((short)_resources.Count); foreach (FRsResource resource in _resources) { resource.Open(); // 序列化资源 FCompressFile file = new FCompressFile(); resource.Serialize(file); FByteStream stream = new FByteStream(); file.Compress(stream); // 输出资源 output.WriteInt32(stream.Length); output.WriteBytes(stream.Memory, 0, stream.Length); } }
//============================================================ // <T>导入设置信息。</T> //============================================================ public void ImportConfig() { Dispose(); // 加载设置文件 string fileName = _directory + "\\import." + _techniqueName + ".xml"; if (RFile.Exists(fileName)) { LoadOrignConfig(new FXmlDocument(fileName).Root); } // 压缩文件 FCompressFile file = new FCompressFile(); Serialize(file); file.Compress(_exportFileName); _logger.Debug(this, "Export", "Export scene success. (file_name={0})", _exportFileName); // 存储信息 Store(); _logger.Debug(this, "Import", "Import scene success. (file_name={0})", fileName); }
//============================================================ // <T>序列化位图数据。</T> // // @params output 输出流 // @params colorCount 调色板颜色数量 // @params pixelCount 分块的像素个数 //============================================================ public bool Compress(IOutput output, int compressCd, int colorCount, int pixelCount) { // 保存数据 using (FByteStream stream = new FByteStream()) { Serialize(stream, colorCount, pixelCount); // 压缩数据 byte[] data = null; if (compressCd == ERsCompress.NoneValue) { data = stream.ToArray(); } else if (compressCd == ERsCompress.DeflateValue) { //using(FRsCompressFile compress = new FRsCompressFile(ERsCompress.Deflate, stream, RResourceManager.CompressBlockSplit)) { using (FCompressFile compress = new FCompressFile(stream)) { data = compress.Compress(); } if (data.Length > stream.Length) { compressCd = ERsCompress.NoneValue; data = stream.ToArray(); } } else if (compressCd == ERsCompress.LzmaValue) { using (FLzmaFile compress = new FLzmaFile(stream)) { data = compress.CompressNative(); } if (data.Length > stream.Length) { compressCd = ERsCompress.NoneValue; data = stream.ToArray(); } } output.WriteInt32(compressCd); output.WriteInt32(data.Length); output.WriteBytes(data, 0, data.Length); } return(true); }
//============================================================ // <T>压缩字节数据。</T> // // @return 字节数据 //============================================================ public byte[] CompressBytes() { byte[] data = null; // Deflate压缩 string compressCd = _compressCd; switch (compressCd) { case ERsCompress.Deflate: using (FCompressFile file = new FCompressFile()) { file.Append(_memory, 0, _length); if (_blockSize > 0) { data = file.BlockCompress(_blockSize); } else { data = file.Compress(); } } break; case ERsCompress.Lzma: using (FLzmaFile file = new FLzmaFile()) { file.Append(_memory, 0, _length); if (_blockSize > 0) { data = file.BlockCompress(_blockSize); } else { data = file.Compress(); } } break; case ERsCompress.LzmaAlchemy: using (FLzmaFile file = new FLzmaFile()) { file.Append(_memory, 0, _length); if (_blockSize > 0) { data = file.BlockCompressNative(_blockSize); } else { data = file.CompressNative(); } } break; } // 检查大小,如果压缩后更大,则不压缩数据 if (data.Length > _length) { data = ToArray(); compressCd = ERsCompress.None; } // 计算效验码 _vertifyCode = RByte.ComputeHash32(data, 0, data.Length); // 写入文件 byte[] result = null; using (FByteStream stream = new FByteStream()) { // 写入信息 stream.WriteUint8((byte)ERsCompress.Parse(compressCd)); stream.WriteInt32(_length); stream.WriteInt32(_vertifyCode); stream.WriteInt32(_blockSize); // 写入数据 if ((ERsCompress.None != compressCd) && (_blockSize > 0)) { stream.WriteBytes(data, 0, data.Length); } else { stream.WriteInt32(1); stream.WriteInt32(data.Length); stream.WriteBytes(data, 0, data.Length); } result = stream.ToArray(); } return(result); }