IOFormat  IOF_v0.34.0_release
Functionalities

IOFormat functionalities, for now, and for the future.

Now

What is available in IOFormat for now...

Access to data

As far, IOFormat only allows to load images (or set of Images).

Supported formats

IOFormat contains a base of plugins to handle the most current formats. See Plugins chapter for more details.

Customer is free to implement its own extractor/writer to handle any other format. See Plugin System chapter for more details.

Reading

Here is the list of supported formats and extensions for reading:

Format input
PNG (.png) any stream
MRC (.mrc) any stream
JPEG (.jpg/.jpeg) any stream
JPEG2K (.jp2/.j2k/.jpc/.j2c) any stream
JPEG3D (.jp3d) file path
Tiff (.tiff/.tif) [^1] any stream
Dicom (.dcm) any stream
BMP (.bmp) any stream
PGX (.pgx) file path
PPM (.ppm) file path
SUN (.ras/.sun) file path
GATAN (.dm2/.dm3/.dm4) file path
RAW (.raw) any stream
LDM (.lda/.ldm) any stream (with limitations)[^2]
AmiraMesh (.am) any stream

[^1]: Tiff native reader may falllback to ImageAccess implementation if some feature is not supported by the native implementation.

[^2]: LDM format is not adapted for streaming because of its multifile structure. It only works if .ldm file contains an URI toward internal .dat file.

Writing

Here is the list of supported formats and extensions for writing:

Format Output Type
PNG (.png) Stream
MRC (.mrc) Stream
JPEG (.jpg/.jpeg) Stream
RAW (.raw) Stream
TIFF (.tiff) Stream
JPEG2K (.jp2) Stream
LDM (.ldm) Stream

Thread safety

Natively, it is not possible to parallelize data access from a same resource. Thus user cannot read and/or write data in a same view (directly coming from IOFormat) without risking causing unpredictable and irretrievable side effects. On the other hand, according to each format, making data access threadsafe is possible, but not yet implemented in any plugin.

Nevertheless, IOLink provides a factory to make any ImageView threadsafe by protecting sensitive methods with lockers.

Environments

IOFormat is available for following compilers:

  • Visual Studio 2015
  • Visual Studio 2017
  • RHEL 8 (gcc 8)
  • Ubuntu 18.04 (gcc 7)
  • Ubuntu 20.04 (gcc 9)

Other languages

IOFormat is wrapped for:

  • .NET Standard 2.0
  • python

Here is a array which gives all compatibility for handled languages:

Compilers C++ .NET Standard 2.0 Python
MSVC 14 X
MSVC 15 X X[^1] 3.6, 3.7, 3.8
Apple Clang 9.1 X
RHEL 8 gcc 8 X X
Ubuntu 18.04 gcc 7 X X 3.6
Ubuntu 20.04 gcc 9 X X 3.8

[^1]: Some limitations in .NET Core 2.1:

  • Any call to IOLink API must be done before using IOFormat (e.g. initialize IOLink log level). Internal issue which occurs when IOLink library is not found by IOFormat library (not located in same folder)
  • in command line, (not from Visual tool) with plugins using dynamically-linked thirdparty libraries. Path must be manually set to indicate the location of thirdparty libraries.