libCZI
Reading CZI documents made easy
|
libCZI is a library intended for providing read-only access to the information contained in CZI-documents.
It features
In a nutshell, it offers (almost...) the same functionality as the 2D-viewer in ZEN - in terms of composing the image (including display-settings) and managing the data found in a CZI-file.
It is intended to be easily portable to other platforms.
It aims to be thread-safe (by most definitions) - which isn't too surprising since it only allows read-only functionality. The library itself does not leverage multithreading, but it is designed for being used in a multithreaded environment.
Conceptionally a CZI-document can be described as a set of blobs (or blocks - in this context just a binary data structure defined only by its length), which are linked by a directory structure.
With the term sub-block we are referring to an entity which contains a 2-dimensional image (or "a bitmap"), some associated metadata in XML-format (which we refer to as sub-block metadata) and (potentially) some other binary attachment (referred to as sub-block attachment).
Do not confuse the terms "sub-block metadata"↔"metadata" and "sub-block attachment"↔"attachment" in this regard. Sub-blocks are identified by something like a coordinate - a list of dimensions and for each dimension a value.
Attachments can contain any sort of binary data (their content is not further defined on the file-format level). They are identified by a string. A naming convention is used to discover their content.
The identifier (or coordinate) of a sub-block can be grouped in two categories: a number of abstract dimensions (abstract in the sense that the number is not directly related to a spatial point) and an X-Y-coordinate in a 2D-plane. Examples for the former are "C-dimension" (used for different channels) or "T-dimensions" (used for images acquired at different points in time) → cf. DimensionIndex. The X-Y-coordinate refer to a common (to all sub-blocks) coordinate system in which the sub-blocks are thought to be arranged. In fact - sub-blocks are not only described by their X-Y-coordinate, but by a complete rectangle (adding witdth and height to the X-Y-coordinate) - called the logical rect. And, in addition there is a parameter physical width and physical height → cf. SubBlockInfo.