libCZI
Reading and Writing CZI documents made easy
libCZI.h
1 // SPDX-FileCopyrightText: 2017-2022 Carl Zeiss Microscopy GmbH
2 //
3 // SPDX-License-Identifier: LGPL-3.0-or-later
4 
5 #pragma once
6 
7 #include <functional>
8 #include <memory>
9 #include <map>
10 #include <limits>
11 #include <string>
12 #include <vector>
13 
14 #include "ImportExport.h"
15 
16 #include "libCZI_exceptions.h"
17 #include "libCZI_DimCoordinate.h"
18 #include "libCZI_Pixels.h"
19 #include "libCZI_Metadata.h"
20 #include "libCZI_Metadata2.h"
21 #include "libCZI_Utilities.h"
22 #include "libCZI_Compositor.h"
23 #include "libCZI_Site.h"
24 #include "libCZI_compress.h"
25 #include "libCZI_StreamsLib.h"
26 
27 // virtual d'tor -> https://isocpp.org/wiki/faq/virtual-functions#virtual-dtors
28 
30 namespace libCZI
31 {
35  enum class SiteObjectType
36  {
37  Default,
39 #if defined(_WIN32)
40  , WithWICDecoder
41 #endif
42  };
43 
44  class ISite;
45 
51 
57  LIBCZI_API void SetSiteObject(libCZI::ISite* pSite);
58 
59  class ICZIReader;
60  class ICziWriter;
61  class ICziReaderWriter;
62  class IStream;
63  class IOutputStream;
64  class IInputOutputStream;
65  class ISubBlock;
66  class IMetadataSegment;
67  class ISubBlockRepository;
68  class IAttachment;
69  class ISubBlockCache;
70 
74  {
77 
79  std::string repositoryUrl;
80 
82  std::string repositoryBranch;
83 
85  std::string repositoryTag;
86  };
87 
95  LIBCZI_API void GetLibCZIVersion(int* pMajor, int* pMinor = nullptr, int* pPatch = nullptr, int* pTweak = nullptr);
96 
100 
103  LIBCZI_API std::shared_ptr<ICZIReader> CreateCZIReader();
104 
108  {
112  };
113 
118  LIBCZI_API std::shared_ptr<ICziWriter> CreateCZIWriter(const CZIWriterOptions* options = nullptr);
119 
122  LIBCZI_API std::shared_ptr<ICziReaderWriter> CreateCZIReaderWriter();
123 
127  LIBCZI_API std::shared_ptr<IBitmapData> CreateBitmapFromSubBlock(ISubBlock* subBlk);
128 
132  LIBCZI_API std::shared_ptr<ICziMetadata> CreateMetaFromMetadataSegment(IMetadataSegment* metadataSegment);
133 
138  LIBCZI_API std::shared_ptr<IAccessor> CreateAccesor(std::shared_ptr<ISubBlockRepository> repository, AccessorType accessorType);
139 
144  LIBCZI_API std::shared_ptr<IStream> CreateStreamFromFile(const wchar_t* szFilename);
145 
150  LIBCZI_API std::shared_ptr<IStream> CreateStreamFromMemory(std::shared_ptr<const void> ptr, size_t dataSize);
151 
155  LIBCZI_API std::shared_ptr<IStream> CreateStreamFromMemory(IAttachment* attachment);
156 
164  LIBCZI_API std::shared_ptr<IOutputStream> CreateOutputStreamForFile(const wchar_t* szFilename, bool overwriteExisting);
165 
171  LIBCZI_API std::shared_ptr<IInputOutputStream> CreateInputOutputStreamForFile(const wchar_t* szFilename);
172 
175  LIBCZI_API std::shared_ptr<ICziMetadataBuilder> CreateMetadataBuilder();
176 
179  LIBCZI_API std::shared_ptr<ISubBlockCache> CreateSubBlockCache();
180 
185  LIBCZI_API std::shared_ptr<ICziMetadataBuilder> CreateMetadataBuilderFromXml(const std::string& xml);
186 
192  class IStream
193  {
194  public:
207  virtual void Read(std::uint64_t offset, void* pv, std::uint64_t size, std::uint64_t* ptrBytesRead) = 0;
208 
209  virtual ~IStream() = default;
210  };
211 
217  {
218  public:
219 
226  virtual void Write(std::uint64_t offset, const void* pv, std::uint64_t size, std::uint64_t* ptrBytesWritten) = 0;
227  virtual ~IOutputStream() = default;
228  };
229 
231  class IInputOutputStream : public IStream, public IOutputStream
232  {
233  };
234 
237  {
241  std::int32_t compressionModeRaw;
242 
245 
248 
251 
254 
256  int mIndex;
257 
261 
266  double GetZoom() const
267  {
268  if (this->physicalSize.w > this->physicalSize.h)
269  {
270  return static_cast<double>(this->physicalSize.w) / this->logicalRect.w;
271  }
272 
273  return static_cast<double>(this->physicalSize.h) / this->logicalRect.h;
274  }
275 
280  {
281  return Utils::CompressionModeFromRawCompressionIdentifier(this->compressionModeRaw);
282  }
283 
286  bool IsMindexValid() const
287  {
288  return libCZI::Utils::IsValidMindex(this->mIndex);
289  }
290  };
291 
295  {
296  std::uint64_t filePosition;
297  };
298 
301  class ISubBlock
302  {
303  public:
306  {
309  Attachment
310  };
311 
314  virtual const SubBlockInfo& GetSubBlockInfo() const = 0;
315 
321  virtual void DangerousGetRawData(MemBlkType type, const void*& ptr, size_t& size) const = 0;
322 
327  virtual std::shared_ptr<const void> GetRawData(MemBlkType type, size_t* ptrSize) = 0;
328 
338  virtual std::shared_ptr<IBitmapData> CreateBitmap() = 0;
339 
340  virtual ~ISubBlock() = default;
341 
346  template <class Q>
347  void DangerousGetRawData(MemBlkType type, const Q*& ptr, size_t& size) const
348  {
349  const void* p;
350  this->DangerousGetRawData(type, p, size);
351  ptr = static_cast<const Q*>(p);
352  }
353  };
354 
357  {
359  char contentFileType[9];
360  std::string name;
361  };
362 
365  {
366  public:
369  virtual const AttachmentInfo& GetAttachmentInfo() const = 0;
370 
375  virtual void DangerousGetRawData(const void*& ptr, size_t& size) const = 0;
376 
380  virtual std::shared_ptr<const void> GetRawData(size_t* ptrSize) = 0;
381 
382  virtual ~IAttachment() = default;
383 
387  template <class Q>
388  void DangerousGetRawData(const Q*& ptr, size_t& size) const
389  {
390  const void* p;
391  this->DangerousGetRawData(p, size);
392  ptr = static_cast<Q*>(p);
393  }
394  };
395 
398  {
399  public:
402  {
404  Attachment
405  };
406 
411  virtual std::shared_ptr<const void> GetRawData(MemBlkType type, size_t* ptrSize) = 0;
412 
418  virtual void DangerousGetRawData(MemBlkType type, const void*& ptr, size_t& size) const = 0;
419 
420  virtual ~IMetadataSegment() = default;
421 
424  std::shared_ptr<ICziMetadata> CreateMetaFromMetadataSegment() { return libCZI::CreateMetaFromMetadataSegment(this); }
425  };
426 
429  {
432 
435  };
436 
439  {
443 
447 
451 
455 
459 
463 
468  std::map<int, BoundingBoxes> sceneBoundingBoxes;
469 
474  bool IsMIndexValid() const
475  {
476  return this->minMindex <= this->maxMindex ? true : false;
477  }
478 
480  void Invalidate()
481  {
482  this->subBlockCount = -1;
483  this->boundingBox.Invalidate();
484  this->boundingBoxLayer0Only.Invalidate();
485  this->dimBounds.Clear();
486  this->sceneBoundingBoxes.clear();
487  this->minMindex = (std::numeric_limits<int>::max)();
488  this->maxMindex = (std::numeric_limits<int>::min)();
489  }
490  };
491 
494  {
505  {
506  std::uint8_t minificationFactor;
507  std::uint8_t pyramidLayerNo;
508 
512  bool IsLayer0() const { return this->minificationFactor == 0 && this->pyramidLayerNo == 0; }
513 
517  bool IsNotIdentifiedAsPyramidLayer() const { return this->minificationFactor == 0xff && this->pyramidLayerNo == 0xff; }
518  };
519 
522  {
524  int count;
525  };
526 
529  std::map<int, std::vector<PyramidLayerStatistics>> scenePyramidStatistics;
530  };
531 
533  class LIBCZI_API ISubBlockRepository
534  {
535  public:
541  virtual void EnumerateSubBlocks(const std::function<bool(int index, const SubBlockInfo& info)>& funcEnum) = 0;
542 
551  virtual void EnumSubset(const IDimCoordinate* planeCoordinate, const IntRect* roi, bool onlyLayer0, const std::function<bool(int index, const SubBlockInfo& info)>& funcEnum) = 0;
552 
558  virtual std::shared_ptr<ISubBlock> ReadSubBlock(int index) = 0;
559 
571  virtual bool TryGetSubBlockInfoOfArbitrarySubBlockInChannel(int channelIndex, SubBlockInfo& info) = 0;
572 
578  virtual bool TryGetSubBlockInfo(int index, SubBlockInfo* info) const = 0;
579 
583 
589 
590  virtual ~ISubBlockRepository() = default;
591  };
592 
594  class LIBCZI_API ISubBlockRepositoryEx
595  {
596  public:
602  virtual void EnumerateSubBlocksEx(const std::function<bool(int index, const DirectorySubBlockInfo& info)>& funcEnum) = 0;
603 
604  virtual ~ISubBlockRepositoryEx() = default;
605  };
606 
608  class LIBCZI_API IAttachmentRepository
609  {
610  public:
617  virtual void EnumerateAttachments(const std::function<bool(int index, const AttachmentInfo& info)>& funcEnum) = 0;
618 
626  virtual void EnumerateSubset(const char* contentFileType, const char* name, const std::function<bool(int index, const AttachmentInfo& info)>& funcEnum) = 0;
627 
633  virtual std::shared_ptr<IAttachment> ReadAttachment(int index) = 0;
634 
635  virtual ~IAttachmentRepository() = default;
636  };
637 
640  {
646  };
647 
651  {
652  public:
654  struct LIBCZI_API OpenOptions
655  {
662  bool lax_subblock_coordinate_checks{ true };
663 
670  bool ignore_sizem_for_pyramid_subblocks{ false };
671 
673  void SetDefault()
674  {
675  this->lax_subblock_coordinate_checks = true;
676  }
677  };
678 
689  virtual void Open(const std::shared_ptr<IStream>& stream, const OpenOptions* options = nullptr) = 0;
690 
694 
700  virtual std::shared_ptr<IMetadataSegment> ReadMetadataSegment() = 0;
701 
710  virtual std::shared_ptr<IAccessor> CreateAccessor(AccessorType accessorType) = 0;
711 
718  virtual void Close() = 0;
719  public:
722  std::shared_ptr<ISingleChannelTileAccessor> CreateSingleChannelTileAccessor()
723  {
724  return std::dynamic_pointer_cast<ISingleChannelTileAccessor, IAccessor>(this->CreateAccessor(libCZI::AccessorType::SingleChannelTileAccessor));
725  }
726 
729  std::shared_ptr<ISingleChannelPyramidLayerTileAccessor> CreateSingleChannelPyramidLayerTileAccessor()
730  {
731  return std::dynamic_pointer_cast<ISingleChannelPyramidLayerTileAccessor, IAccessor>(this->CreateAccessor(libCZI::AccessorType::SingleChannelPyramidLayerTileAccessor));
732  }
733 
736  std::shared_ptr<ISingleChannelScalingTileAccessor> CreateSingleChannelScalingTileAccessor()
737  {
738  return std::dynamic_pointer_cast<ISingleChannelScalingTileAccessor, IAccessor>(this->CreateAccessor(libCZI::AccessorType::SingleChannelScalingTileAccessor));
739  }
740  };
741 }
742 
743 #include "libCZI_Helpers.h"
744 #include "libCZI_Write.h"
745 #include "libCZI_ReadWrite.h"
Implementation of a class representing an interval (and implementing the libCZI::IDimBounds-interface...
Definition: libCZI_DimCoordinate.h:288
void Clear(libCZI::DimensionIndex dimension)
Definition: libCZI_DimCoordinate.h:356
Implementation of a class representing a coordinate (and implementing the IDimCoordinate-interface).
Definition: libCZI_DimCoordinate.h:149
Representation of an attachment. An attachment is a binary blob, its inner structure is opaque.
Definition: libCZI.h:365
virtual std::shared_ptr< const void > GetRawData(size_t *ptrSize)=0
void DangerousGetRawData(const Q *&ptr, size_t &size) const
Definition: libCZI.h:388
virtual void DangerousGetRawData(const void *&ptr, size_t &size) const =0
virtual const AttachmentInfo & GetAttachmentInfo() const =0
Interface for the attachment repository. This interface is used to access the attachments in a CZI-fi...
Definition: libCZI.h:609
virtual std::shared_ptr< IAttachment > ReadAttachment(int index)=0
virtual void EnumerateAttachments(const std::function< bool(int index, const AttachmentInfo &info)> &funcEnum)=0
virtual void EnumerateSubset(const char *contentFileType, const char *name, const std::function< bool(int index, const AttachmentInfo &info)> &funcEnum)=0
Definition: libCZI.h:651
virtual std::shared_ptr< IAccessor > CreateAccessor(AccessorType accessorType)=0
std::shared_ptr< ISingleChannelTileAccessor > CreateSingleChannelTileAccessor()
Definition: libCZI.h:722
std::shared_ptr< ISingleChannelScalingTileAccessor > CreateSingleChannelScalingTileAccessor()
Definition: libCZI.h:736
virtual std::shared_ptr< IMetadataSegment > ReadMetadataSegment()=0
virtual FileHeaderInfo GetFileHeaderInfo()=0
virtual void Close()=0
std::shared_ptr< ISingleChannelPyramidLayerTileAccessor > CreateSingleChannelPyramidLayerTileAccessor()
Definition: libCZI.h:729
virtual void Open(const std::shared_ptr< IStream > &stream, const OpenOptions *options=nullptr)=0
Definition: libCZI_ReadWrite.h:40
Definition: libCZI_Write.h:408
Interface used to represent a coordinate (in the space of the dimensions identified by DimensionIndex...
Definition: libCZI_DimCoordinate.h:37
Interface for a read-write-stream.
Definition: libCZI.h:232
Interface representing the metadata-segment.
Definition: libCZI.h:398
MemBlkType
Values that represent the two different data types found in the metadata-segment.
Definition: libCZI.h:402
@ XmlMetadata
The metadata (in UTF8-XML-format)
Definition: libCZI.h:403
@ Attachment
The attachment (not currently used).
Definition: libCZI.h:404
virtual std::shared_ptr< const void > GetRawData(MemBlkType type, size_t *ptrSize)=0
std::shared_ptr< ICziMetadata > CreateMetaFromMetadataSegment()
Definition: libCZI.h:424
virtual void DangerousGetRawData(MemBlkType type, const void *&ptr, size_t &size) const =0
Definition: libCZI.h:217
virtual void Write(std::uint64_t offset, const void *pv, std::uint64_t size, std::uint64_t *ptrBytesWritten)=0
Definition: libCZI_Site.h:62
Definition: libCZI.h:193
virtual void Read(std::uint64_t offset, void *pv, std::uint64_t size, std::uint64_t *ptrBytesRead)=0
Definition: libCZI_Compositor.h:138
Definition: libCZI.h:302
MemBlkType
Values that represent the three different data types found in a sub-block.
Definition: libCZI.h:306
@ Attachment
An enum constant representing the attachment (of a sub-block).
Definition: libCZI.h:309
@ Data
An enum constant representing the bitmap-data.
Definition: libCZI.h:308
@ Metadata
An enum constant representing the metadata.
Definition: libCZI.h:307
virtual const SubBlockInfo & GetSubBlockInfo() const =0
virtual std::shared_ptr< const void > GetRawData(MemBlkType type, size_t *ptrSize)=0
virtual void DangerousGetRawData(MemBlkType type, const void *&ptr, size_t &size) const =0
void DangerousGetRawData(MemBlkType type, const Q *&ptr, size_t &size) const
Definition: libCZI.h:347
virtual std::shared_ptr< IBitmapData > CreateBitmap()=0
Additional functionality for the subblock-repository, providing some specialized and not commonly use...
Definition: libCZI.h:595
virtual void EnumerateSubBlocksEx(const std::function< bool(int index, const DirectorySubBlockInfo &info)> &funcEnum)=0
Interface for sub-block repository. This interface is used to access the sub-blocks in a CZI-file.
Definition: libCZI.h:534
virtual void EnumerateSubBlocks(const std::function< bool(int index, const SubBlockInfo &info)> &funcEnum)=0
virtual SubBlockStatistics GetStatistics()=0
virtual bool TryGetSubBlockInfo(int index, SubBlockInfo *info) const =0
virtual PyramidStatistics GetPyramidStatistics()=0
virtual void EnumSubset(const IDimCoordinate *planeCoordinate, const IntRect *roi, bool onlyLayer0, const std::function< bool(int index, const SubBlockInfo &info)> &funcEnum)=0
virtual bool TryGetSubBlockInfoOfArbitrarySubBlockInChannel(int channelIndex, SubBlockInfo &info)=0
virtual std::shared_ptr< ISubBlock > ReadSubBlock(int index)=0
static bool IsValidMindex(int mIndex)
Definition: libCZI_Utilities.h:347
static libCZI::CompressionMode CompressionModeFromRawCompressionIdentifier(std::int32_t m)
External interfaces, classes, functions and structs are found in the namespace "libCZI".
Definition: libCZI.h:31
LIBCZI_API std::shared_ptr< IAccessor > CreateAccesor(std::shared_ptr< ISubBlockRepository > repository, AccessorType accessorType)
LIBCZI_API std::shared_ptr< IOutputStream > CreateOutputStreamForFile(const wchar_t *szFilename, bool overwriteExisting)
LIBCZI_API ISite * GetDefaultSiteObject(libCZI::SiteObjectType type)
LIBCZI_API void SetSiteObject(libCZI::ISite *pSite)
LIBCZI_API std::shared_ptr< ICziMetadataBuilder > CreateMetadataBuilder()
CompressionMode
An enum specifying the compression method.
Definition: libCZI_Pixels.h:131
LIBCZI_API std::shared_ptr< ICziMetadata > CreateMetaFromMetadataSegment(IMetadataSegment *metadataSegment)
LIBCZI_API std::shared_ptr< IInputOutputStream > CreateInputOutputStreamForFile(const wchar_t *szFilename)
SubBlockPyramidType
Definition: libCZI_Pixels.h:144
SiteObjectType
Definition: libCZI.h:36
@ WithJxrDecoder
An enum constant representing a Site-object using the internal JXRLib.
@ Default
An enum constant representing the default option (which is JXRLib)
LIBCZI_API std::shared_ptr< IStream > CreateStreamFromFile(const wchar_t *szFilename)
LIBCZI_API std::shared_ptr< ICziMetadataBuilder > CreateMetadataBuilderFromXml(const std::string &xml)
AccessorType
Values that represent the accessor types.
Definition: libCZI_Compositor.h:22
@ SingleChannelTileAccessor
The single-channel-tile accessor (associated interface: ISingleChannelTileAccessor).
@ SingleChannelPyramidLayerTileAccessor
The single-channel-pyramidlayer-tile accessor (associated interface: ISingleChannelPyramidLayerTileAc...
@ SingleChannelScalingTileAccessor
The scaling-single-channel-tile accessor (associated interface: ISingleChannelScalingTileAccessor).
LIBCZI_API void GetLibCZIBuildInformation(BuildInformation &info)
LIBCZI_API std::shared_ptr< ICZIReader > CreateCZIReader()
PixelType
An enum representing a pixel-type.
Definition: libCZI_Pixels.h:114
LIBCZI_API std::shared_ptr< ICziWriter > CreateCZIWriter(const CZIWriterOptions *options=nullptr)
LIBCZI_API std::shared_ptr< IBitmapData > CreateBitmapFromSubBlock(ISubBlock *subBlk)
LIBCZI_API void GetLibCZIVersion(int *pMajor, int *pMinor=nullptr, int *pPatch=nullptr, int *pTweak=nullptr)
LIBCZI_API std::shared_ptr< ISubBlockCache > CreateSubBlockCache()
LIBCZI_API std::shared_ptr< ICziReaderWriter > CreateCZIReaderWriter()
LIBCZI_API std::shared_ptr< IStream > CreateStreamFromMemory(std::shared_ptr< const void > ptr, size_t dataSize)
Information about an attachment.
Definition: libCZI.h:357
char contentFileType[9]
A null-terminated character array identifying the content of the attachment.
Definition: libCZI.h:359
std::string name
A string identifying the content of the attachment.
Definition: libCZI.h:360
libCZI::GUID contentGuid
A Guid identifying the content of the attachment.
Definition: libCZI.h:358
This structure gathers the bounding-boxes determined from all sub-blocks and only be those on pyramid...
Definition: libCZI.h:429
IntRect boundingBoxLayer0
The bounding-boxes determined only from sub-blocks of pyramid-layer 0.
Definition: libCZI.h:434
IntRect boundingBox
The bounding-box determined from all sub-blocks.
Definition: libCZI.h:431
Definition: libCZI.h:74
std::string repositoryTag
The tag or hash of the repository - if available.
Definition: libCZI.h:85
std::string repositoryUrl
The URL of the repository - if available.
Definition: libCZI.h:79
std::string repositoryBranch
The branch - if available.
Definition: libCZI.h:82
std::string compilerIdentification
The compiler identification. This is a free-form string.
Definition: libCZI.h:76
Definition: libCZI.h:108
bool allow_duplicate_subblocks
Definition: libCZI.h:111
Definition: libCZI.h:295
std::uint64_t filePosition
The file position of the subblock.
Definition: libCZI.h:296
Global information about the CZI-file (from the CZI-fileheader-segment).
Definition: libCZI.h:640
libCZI::GUID fileGuid
Definition: libCZI.h:643
int majorVersion
The major version.
Definition: libCZI.h:644
int minorVersion
The minor version.
Definition: libCZI.h:645
Represents a globally unique identifier (GUID) consisting of four unsigned 32-bit integers.
Definition: libCZI_Utilities.h:25
This structure gathers the settings for controlling the 'Open' operation of the CZIReader-class.
Definition: libCZI.h:655
void SetDefault()
Sets the the default.
Definition: libCZI.h:673
A rectangle (with integer coordinates).
Definition: libCZI_Pixels.h:17
int h
The height of the rectangle.
Definition: libCZI_Pixels.h:21
int w
The width of the rectangle.
Definition: libCZI_Pixels.h:20
void Invalidate()
Invalidates this object.
Definition: libCZI_Pixels.h:24
A structure representing a size (width and height) in integers.
Definition: libCZI_Pixels.h:91
std::uint32_t h
The height.
Definition: libCZI_Pixels.h:93
std::uint32_t w
The width.
Definition: libCZI_Pixels.h:92
std::uint8_t minificationFactor
Factor by which adjacent pyramid-layers are shrunk. Commonly used in CZI are 2 or 3.
Definition: libCZI.h:506
bool IsLayer0() const
Definition: libCZI.h:512
std::uint8_t pyramidLayerNo
The pyramid layer number.
Definition: libCZI.h:507
bool IsNotIdentifiedAsPyramidLayer() const
Definition: libCZI.h:517
Information about a pyramid-layer.
Definition: libCZI.h:522
int count
The number of sub-blocks which are present in the pyramid-layer.
Definition: libCZI.h:524
PyramidLayerInfo layerInfo
This identifies the pyramid-layer.
Definition: libCZI.h:523
Statistics about the pyramid-layers.
Definition: libCZI.h:494
std::map< int, std::vector< PyramidLayerStatistics > > scenePyramidStatistics
Definition: libCZI.h:529
Information about a sub-block.
Definition: libCZI.h:237
CompressionMode GetCompressionMode() const
Definition: libCZI.h:279
PixelType pixelType
The pixel type of the sub-block.
Definition: libCZI.h:244
int mIndex
The M-index of the sub-block (if available). If not available, it has the value std::numeric_limits<i...
Definition: libCZI.h:256
std::int32_t compressionModeRaw
Definition: libCZI.h:241
bool IsMindexValid() const
Definition: libCZI.h:286
SubBlockPyramidType pyramidType
Definition: libCZI.h:260
libCZI::IntSize physicalSize
The physical size of the bitmap (which may be different to the size of logicalRect).
Definition: libCZI.h:253
libCZI::IntRect logicalRect
The rectangle where the bitmap (in this sub-block) is located.
Definition: libCZI.h:250
double GetZoom() const
Definition: libCZI.h:266
libCZI::CDimCoordinate coordinate
The coordinate of the sub-block.
Definition: libCZI.h:247
Statistics about all sub-blocks found in a CZI-document.
Definition: libCZI.h:439
CDimBounds dimBounds
Definition: libCZI.h:462
int subBlockCount
Definition: libCZI.h:442
int minMindex
Definition: libCZI.h:446
void Invalidate()
Invalidates this object.
Definition: libCZI.h:480
IntRect boundingBoxLayer0Only
Definition: libCZI.h:458
bool IsMIndexValid() const
Definition: libCZI.h:474
IntRect boundingBox
Definition: libCZI.h:454
std::map< int, BoundingBoxes > sceneBoundingBoxes
Definition: libCZI.h:468
int maxMindex
Definition: libCZI.h:450