Personal tools
  • We're Hiring!

You are here: Home News and Events Release of OME Files C++ 0.3.0
« April 2024 »

Release of OME Files C++ 0.3.0

The OME Consortium are pleased to announce the release of OME Files C++ 0.3.0

OME Files is a reference implementation of the OME Data Model and OME-TIFF file format for the storage and interchange of biological imaging data and metadata. It provides support for:

  • the OME Data Model (model objects, metadata store, XSL transforms and XML validation)
  • OME-TIFF reading
  • OME-TIFF writing

Changes in this release include:

  • updating the minimum C++ language standard to C++11 (from C++98)
  • adding support for TIFF compression
  • performance improvements for metadata reading and TIFF reading and writing
  • addition of the ome-model component, replacing bioformats' ome-xml (this is the data model specification and ome-xml library following decoupling from the Bio-Formats repository)


The software release is available at

This page includes links to the individual repositories and source releases, as well as the documentation and binary builds of the collection for several common platforms, including Windows, Linux and MacOS X.

Upgrading from 0.2.3

The main change is the switch to C++11. No immediate source changes are strictly required; the compatibility headers will continue to work for now, however upgrading to the standard C++11 headers is highly recommended to avoid future breakage. Client code is free to use any C++11 features of their choosing. To update your code:

  • enable C++11 or later support for your compiler
    • MSVC users do not need to do anything (it doesn't have any special option)
    • GCC and Clang users need to add the "-std=c++11" or "-std=c++14" option (the most recent versions default to C++14 and don't need this)
    • CMake users can set CMAKE_CXX_STANDARD_REQUIRED=11 and CMAKE_CXX_STANDARD=14 to try C++14 and fall back to C++11 if C++14 is unavailable
  • replace <ome/compat/array.h> with <array> and use of ome::compat::array with std::array
  • replace <ome/compat/cstdint.h> with <cstdint>
  • replace <ome/compat/memory.h> with <memory> and use of ome::compat::shared_ptr with std::shared_ptr (likewise for related types and functions such as std::weak_ptr, std::make_shared and std::dynamic_pointer_cast)
  • replace <ome/compat/tuple.h> with <tuple> and use of ome::compat::tuple with std::tuple (likewise for related functions such as std::get)
  • the above compatibility headers, and their declared types in the ome::compat namespace still exist but are deprecated; they simply wrap the standard headers and types.
  • the deprecated headers will be removed for 0.4.0.

Changes since ome-files-cpp 0.2.3

All components

  • C++11 is now the minimum required language version, with C++14 being used when available
  • enabled the use of a restricted number of C++11 features, including enum class, nullptr, initializer lists, range-based for loops and type traits
  • enabled the use of C++11 syntax changes including "<::" not being interpreted as a trigraph and ">>" being used to close nested templates instead of "> >"
  • additional features will be enabled in subsequent releases
  • Google Test (gtest) is no longer built separately in each source component; the latest gtest release now allows use as a conventional library
  • source releases are now made directly from git with "git archive"; additional version metadata is no longer embedded in the source releases

OME Common

  • Boost MPL size limits are now set with MSVC only; they are no longer required for other compilers with C++11
  • <ome/compat/array.h>, <ome/compat/cstdint.h>, <ome/compat/memory.h> and <ome/compat/tuple.h> are now deprecated in favor of the standard headers; they wrap the standard headers for backward compatibility but will be removed in the next breaking release

OME Model

The first release of the ome-model components (specification, xsd-fu and ome-xml) since decoupling from Bio-Formats.

  • sources use a Java maven source layout; this component is a dual language component building both C++ and Java libraries
  • specification OME-XML samples: Added ROI transform and mask samples
  • specification transforms: Corrected upgrade to preserve ROI transforms
  • AffineTransform: Initialized with the identity matrix when default constructed
  • migrated formats documentation from the ome-documentation repository, updated and integrated with cmake and maven builds
  • renamed toplevel project from ome-xml to ome-model; the library continues to be named ome-xml

OME Files

  • added support for TIFF compression, exposing all compression algorithms supported by libtiff. Deflate and LZW will work for all pixel types; JPEG support will be available if libtiff was compiled with support for libjpeg
  • OMETIFFReader now sets the interleaved property according to the TIFF PlanarConfiguration tag; previously it was set to false unconditionally
  • TIFF wrapper: Cache IFD offsets on reading; this speeds up reading by changing the complexity of indexed IFD access from O(n) to O(1)
  • OMETIFFWriter: Sets the interleaved property unconditionally, even when the samples per pixel count is 1; this is to ensure easy round-tripping of data between readers and writers using the same logical dimension ordering in the pixel buffer
  • all TIFF writers: Set a default strip size of 2^16 pixels, which is for example 64KiB for 8-bit greyscale data, or 192KiB for 8-bit RGB data; the previous default was to copy the Java behavior of one row per strip, which was much less efficient

OME QtWidgets

  • no changes

Super-Build 0.3.0

  • gtest: Build and install (into tool directory) like a regular package
  • renamed superbuild-install to stage
  • docs: Dropped PDF documentation; documented C++11 changes
  • added git-dir option to simplify building multiple repositories from git
  • Package changes:
    • boost 1.63: Updated package
    • ome-common 5.4.0: Updated package
    • ome-files 0.3.0: Updated package
    • ome-files-py: New experimental package (initial Python bindings for OME Files C++)
    • ome-model 5.5.0: New package (previously part of the Bio-Formats sources)
    • ome-qtwidgets 5.4.0: Updated package
    • png 1.6.28: Updated package
    • tiff 4.0.7: Updated package
    • zlib 1.2.10: Updated package

Future changes

Upcoming improvements include:

All components

  • enabling of additional C++11 features following testing of compiler support and compatibility
  • further performance profiling and scalability improvements


  • support for the use of custom annotations with the OME-XML data model API
  • this generalized annotation support will also be used for existing annotations including Modulo and OriginalMetadata
  • improved and more comprehensive OME-XML and OME-TIFF samples
  • Improved documentation and code samples

OME Files

  • improvements to automated integration testing of OME-TIFF files


  • further improvements for building on Windows, including initial VS2017 support
  • updating of the set of platforms binary builds are provided for

You can find further information on which features will be included in upcoming releases via the Trello boards

(note that these are a work in progress and are subject to change).




For any problems or comments, please use the OME forums or mailing lists.

Kind regards, Roger Leigh

on behalf of the OME team

Document Actions