diff --git a/czi-format/czi-parser/czi_file.cpp b/czi-format/czi-parser/czi_file.cpp index 4c6854f4c8d9e079bc58513782b821d17fbe5791..5f8273828d5cffdebe3ab675f0fce92c05baf0ed 100644 --- a/czi-format/czi-parser/czi_file.cpp +++ b/czi-format/czi-parser/czi_file.cpp @@ -414,6 +414,10 @@ void CziFile::test_rle_encode() const float dataSize, dataZSize, rleDataSize, rleDataZSize, ratio, ratioZ; float overall = 0; float overallZ = 0; + + size_t totalSize = 0; + size_t totalRleSize = 0; + size_t totalRleSizeZ = 0; for (size_t i = 0; i < subBlockDirectory.entries.size(); i++) { auto data = get_image_data(i, false); @@ -433,11 +437,18 @@ void CziFile::test_rle_encode() const overall += ratio; overallZ += ratioZ; - printf("Subblock %-3i Compression ratios: Normal: %8f Z-Ordered: %8f\n", (int)i, ratio, ratioZ); + totalSize += dataSize; + totalRleSize += rleDataSize; + totalRleSizeZ += rleDataZSize; + if (ratio > 1 || ratioZ > 1) + printf("Subblock %-3i Compression ratios: Normal: %8f Z-Ordered: %8f\n", (int)i, ratio, ratioZ); + else + printf("Subblock %-3i Compression ratios: Normal: %8f Z-Ordered: %8f\n", (int)i, ratio, ratioZ); } float dataCount = (float)subBlockDirectory.entries.size(); overall /= dataCount; overallZ /= dataCount; printf("Overall Normal %8f Z-Ordered: %8f\n", overall, overallZ); + printf("Original size: %8lu B Rle size: %8lu B RleZOrder size: %8lu B\n", totalSize, totalRleSize, totalRleSizeZ); } \ No newline at end of file diff --git a/czi-format/czi-parser/czi_parser.cpp b/czi-format/czi-parser/czi_parser.cpp index ca2788c6bb19108fd4557ca022ee2b334cea9674..d7ce062cf20d6e9f77653abb4bd6fa633b84ec86 100644 --- a/czi-format/czi-parser/czi_parser.cpp +++ b/czi-format/czi-parser/czi_parser.cpp @@ -1,6 +1,7 @@ #include "czi_parser.h" -CziParser::CziParser() +CziParser::CziParser(bool parseMetadata) { + this->parseMetadata = parseMetadata; } CziParser::~CziParser() { @@ -106,13 +107,22 @@ MetadataSegment CziParser::parse_metadata(BinaryFileStream &cziStream, const lon // Skipping 248 spared bytes. cziStream.move_by(248); - //printf("Want to consume xml bytes\n"); - result.xmlString = utf8bytes_to_string(cziStream.consume_bytes(result.xmlSize)); - //printf("%s\n", result.xmlString.c_str()); + if (this->parseMetadata) + { + result.xmlString = utf8bytes_to_string(cziStream.consume_bytes(result.xmlSize)); + //printf("%s\n", result.xmlString.c_str()); #if VERBOSE_PARSER - printf("Parsed Metadata, containing string of length: %li.\n", result.xmlString.size()); + printf("Parsed Metadata, containing string of length: %li.\n", result.xmlString.size()); #endif // VERBOSE_PARSER + } + else + { + cziStream.move_by(result.xmlSize); +#if VERBOSE_PARSER + printf("Parsed Metadata, skipping reading metadata bytes; parseMetadata=false.\n"); +#endif // VERBOSE_PARSER + } return result; } @@ -274,10 +284,19 @@ SubBlockSegment CziParser::parse_subblock(BinaryFileStream &cziStream, const lon cziStream.move_by(distance); // Metadata bytes - auto metadataBytes = cziStream.consume_bytes(result.metadataSize); - result.metadataString = utf8bytes_to_string(metadataBytes); - - parse_subblock_metadata(metadataBytes); + if (this->parseMetadata) + { + auto metadataBytes = cziStream.consume_bytes(result.metadataSize); + result.metadataString = utf8bytes_to_string(metadataBytes); + parse_subblock_metadata(metadataBytes); + } + else + { + cziStream.move_by(result.metadataSize); +#if VERBOSE_PARSER + printf("Skipping reading metadata bytes.\n"); +#endif // VERBOSE_PARSER + } //printf("%s\n", result.metadataString.c_str()); // Data bytes diff --git a/czi-format/czi-parser/czi_parser.h b/czi-format/czi-parser/czi_parser.h index 9e1fb15fcdf261e07ac7828c2979da7fd3efbcdb..144ad241ef9e14db99bc575236855ddf21ede374 100644 --- a/czi-format/czi-parser/czi_parser.h +++ b/czi-format/czi-parser/czi_parser.h @@ -7,6 +7,7 @@ class CziParser { private: + bool parseMetadata; SegmentHeader parse_segment_header(BinaryFileStream &cziStream); FileHeaderSegment parse_file_header(BinaryFileStream &cziStream); MetadataSegment parse_metadata(BinaryFileStream &cziStream, const long position); @@ -23,7 +24,7 @@ private: Dimension to_dimension_type(const std::vector<byte> &bytes); public: - CziParser(); + CziParser(bool parseMetadata = true); ~CziParser(); CziFile parse_czi_file(const std::string &file); };