IOLink 1.11.0
Loading...
Searching...
No Matches
API ChangeLog

IOLink 1.11.0 - 2024-09-24

IOL-880: Renaming of ImageType, ImageTypeId and ImageDimension to AxesInterpretation, AxesInterpretationId and ImageAxis

In C++ and Python only:

  • ImageType is renamed to AxesInterpretation
  • ImageTypeId is renamed to AxesInterpretationId
  • ImageDimension is renamed to ImageAxis

In C#, these names remain the same due to technical reasons.

IOL-895: Added a new method to access the underlying unmanaged memory buffer in dotnet

New RawBuffer method in ImageView in dotnet only.

IOL-899: Added new read/write methods in C# to improve usability of ImageView

In C#, new extensions for ImageViews:

  • byte[] Read(VectorXu64) which directly returns a byte array
  • void Read<T>(VectorXu64, T[]) which takes a typed buffer as argument
  • T[] Read<T>(VectorXu64) which returns a typed buffer
  • void Write<T>(VectorXu64, T[]) which takes a typed buffer as argument
  • void Write<T>(VectorXu64, T ) which takes a typed value as argument (for scalar types)

IOL-909: pandas interoperability module in Python

New class PandasInterop in Python iolink module, after importing iolink.pandas_interop. It provides two methods: to_pandas and from_pandas.

IOLink 1.10.0 - 2024-06-19

IOL-871: New functions for easier C++/Python ImageView interoperability

Added methods create_from_pointer and to_pointer to ImageView in Python.

IOL-866: New extension to handle column units in DataFrameView

  • new extension ColumnUnitExtension for DataFrameView
  • shortcuts in DataFrameView: unit and setUnit.
  • new upcasting mechanics for extensions.

IOL-873: Added direct access to data for Vector and VectorX

data() and sizeInBytes() methods added to Vector and VectorX, respectively to get data pointer and to know its size in bytes.

IOL-470: New operations for matrices

New matrix operations:

  • Matrices multiplication
  • Multiply a vector by a matrix
  • Matrix inversion

IOL-869: New factory for transformation matrices

Added new factories TransformMatrix3Factory and TransformMatrix4Factory, to be used for 2D and 3D transforms respectively.

IOLink 1.8.0 - 2023-12-19

IOL-377: New API to convert VariantDataValue

In C++:

  • Added methods VariantDataValueConverter::to<<type>>Array(std::shared_ptr<VariantDataValue> value, <<type>> * values, size_t arraySize) to retrieve all values from a VariantDataValue into a pre-allocated array.
  • Added methods VariantDataValueConverter::to<<type>>(std::shared_ptr<VariantDataValue> variant, size_t index) methods. This parameter allows to select the value to convert.

In C#:

  • New methods VariantDataValueConverter.To<<type>>Array(std::shared_ptr<VariantDataValue> value, <<type>> [] values) to retrieve all values from a VariantDataValue into a pre-allocated array.
  • New methods VariantDataValueConverter.To<<type>>(std::shared_ptr<VariantDataValue> value, uint index) to convert the Nth value of a VariantDataValue.

In Python:

  • Slice operator is defined for VariantDataValue object so as to retrieve one specific value, or a range of value from the VariantDataValue.

IOL-782: New class for UID generation

Add new class UidGenerator that defines the constant UNDEFINED_UID and the method generate, that helps generate a new UID.

IOL-792: Rework the Indexer to use byte strides

New Indexer methods:

  • dtype(): to get the underlying data type
  • byteStride(): to get the byte strides of the indexer
  • byteStride(index): to get a specific byte stride of the indexer
  • byteCount(): returning the total number of bytes indexed
  • isContinuous(): checking if the indexed elements are continuous in memory

New Indexer constructors taking data types to build the indexer:

  • Indexer(shape, dtype)
  • Indexer(shape, dtype, standardLayout)
  • Indexer(shape, dtype, byteStride)
  • Indexer(shape, dtype, byteStride, layout)

All other old constructors are now deprecated.

IOLink 1.7.2 - 2023-12-11

IOL-531: ImageViewFactory::fromRandomAccess now raises exception

ImageViewFactory::fromRandomAccess now raises an exception instead of returning a nullptr when randomAccess size is invalid.

IOLink 1.7.0 - 2023-09-14

IOL-764: Support for buffer protocol in read and write region methods in Python

ImageView.read_region and ImageView.write_region methods accept protocol buffer in argument

IOL-700: Optimization of reading operations concerning stack of images

ImageViewFactory::stack method has an additional parameter to set the thread count.

IOL-763: Uniformize name of ImageView properties in Python

In Python only: ImageView.imageInterpretation property is renamed into ImageView.image_interpretation to uniformize with axes_interpretation property.

IOL-709: Make variants of read methods that return an array in Python and C#

New methods for various view types that read data, in order to make a version that return an array:

  • In C#:
    • In StreamAccessExtension adding byte[] Read(this StreamAccess obj, uint size)
    • In RandomAccessExtension adding byte[] Read(this RandomAccess obj, uint offset, uint size)
    • In ImageViewExtension adding T[] ReadRegion<T>(this ImageView image, RegionXu64 region)
    • In DataFrameViewExtension adding T[] Read<T>(this DataFrameView frame, uint column, uint offset, uint count) and T[] Read<T>(this DataFrameView frame, string column, uint offset, uint count)
  • In Python:
    • In StreamAccess and RandomAccess you can specify a number of bytes to read instead of a destination buffer, and the function will return a bytes instances containing the bytes read.
    • When using the DataFrameView.read method you can now ommit the dst paramaters, and if so, the read data will be returned by the method itself.

IOL-747: In Python, uniform method can now accept different input types

ImageViewFactory.uniform can now be called using a single value, a list or an array.

IOL-708: Improve read/write methods in ImageView and DataFrameView in C# and Python

In Python:

  • Read/write methods in ImageView can now be called with arrays, lists.
  • Write methods in ImageView can now be called tuples.
  • Read/write methods in DataFrameView can now be called with arrays and lists. In C#:
  • Read/write methods in ImageView can now be called with typed arrays.
  • Read/write methods in DataFrameView can now be called with typed arrays.

IOL-711: Support for any sequence were you have a vector argument in Python

All method that take a VectorN or VectorX as argument can now be given a sequence, like a tuple or a list instead.

IOLink 1.6.0 - 2023-06-26

IOL-728: Add extension to View so as to retrieve data origins

New Method View::viewOrigin() to access to ViewOriginExtension. ViewOriginExtension is a new extension which allows getting information about view data.

IOL-629: Add string representation for DataFrameView, and also html in Python only.

Added method DataFrameView::toString in C++ _repr_ and _repr_html_ methods are available in Python.

IOLink 1.5.0 - 2023-05-05

IOL-698: New helper to know if 2 views have common ancestors

New method DependencyGraph::hasCommonAncestor

IOL-678: Add shortcut to set elements of data frames

Adding a new method to simply set the value of a DataFrameView cell:

  • setAt in C++
  • SetAt in C#
  • set_at in Python

IOL-687: Add an allocate method to create empty in-memory DataFrameViews

New DataFrameViewFactory::allocate() method without parameter to create an empty (no row, no column) in-memory DataFrameView.

IOL-681: Add shortcuts in ImageView to ease ImageProperties access

Following methods are added to ImageView to get properties values:

  • axesInterpretation()
  • bitDepth()
  • hasAlpha()
  • imageInterpretation()
  • spatialDirections()
  • spatialOrigin()
  • spatialSpacing()
  • spatialUnit()
  • valueRange()

And also methods to set the values:

  • setAxesInterpretation()
  • setBitDepth()
  • setAlpha()
  • setImageInterpretation()
  • setSpatialDirections()
  • setSpatialOrigin()
  • setSpatialSpacing()
  • setSpatialUnit()
  • setValueRange()

IOL-601: New extension to ImageView to retrieve information about parallel access capabilities

New extension class: ParallelAccessExtension. Provides a method to retrieve a ParallelAccessCapability flagSet which indicates available capabilities for parallel accesses.

IOLink 1.4.0 - 2023-02-03

IOL-616: Add serialization support for ArrayX

New methods in Serialization:

  • encodeArrayX with variants for all ArrayX types
  • decodeArrayX with variants for all ArrayX types

IOL-617: DataFrameView serialization

Added 2 new methods:

  • Serialization::encodeDataFrameView to encode a DataFrameView into a stream
  • Serialization::decodeDataFrameView to decode a DataFrameView from a stream

IOL-618: Add methods for Matrix serialization

New methods added:

  • Serialization::decodeMatrix3f and Serialization::encodeMatrix3f
  • Serialization::decodeMatrix4f and Serialization::encodeMatrix4f
  • Serialization::decodeMatrix3d and Serialization::encodeMatrix3d
  • Serialization::decodeMatrix4d and Serialization::encodeMatrix4d

IOL-557: ArrayX::toString method now displays array content (Numpy-style)

New ArrayX::toString method behavior that displays the content of the array (Numpy-style)

IOL-630: Add data frame cell value access

Added methods for each language interface, as it is not C++ wrapped. In C++:

  • Adds two variants of the at<T>template method, one taking an index as the column argument, and one taking the column name In C#:
  • Added two similar variant of the At<T> method In Python:
  • Added the at method

IOLink 1.3.0 - 2022-10-07

IOL-578: Add memory implementation for DataFrameView

  • New DataFrameViewFactory class to create DataFrameView instances
  • Methods to read/write string from DataFrameView instances in Python and C#

IOL-581: Add equality operators for ArrayX

  • Add operator== and operator!= method for ArrayX.

IOL-440: Possibility to convert ImageView to Numpy with dimensions reorder

  • New NumpyInterop.order_to_numpy_array method which allows to reorder dimensions at conversion into numpy array

IOL-585: Inter-operability between StreamAccess and RAW IOBase python interface

  • In python, new method to_raw_io in StreamAccess to retrieve the RAW IOBase adapter for the current stream.
  • It is also possible to use RawIOInterop static class to do the same operation on a StreamAccess.

IOL-590: RegionX can now be stored in containers

Implementation of missing constructors in RegionX:

  • Copy constructor
  • Move constructor
  • Assignment operator (by copy and move)

IOL-594: Possibility for user to convert a Numpy into ImageView and set major properties

Both NumpyInterop.order_from_numpy_array and NumpyInterop.from_numpy_array methods have now 2 optional arguments:

  • interpretation (to set an ImageInterpretation)
  • hasAlpha (boolean)

IOLink 1.2.0 - 2022-07-11

IOL-522: Add equality operators in ImageInfoProperty and SpatialCalibrationProperty

Equality operators (!= and ==) are now available for ImageInfoProperty and SpatialCalibrationProperty.

IOL-513: ImageType can now be initialized from an integer

  • New constructor ImageType(uint64_t val)
  • New method ImageType::value() which returns the internal integer value

IOL-553: Added possibility to serialize ImageViews

Two methods added:

  • Serialization::encodeImageView to serialize an ImageView into a Stream
  • Serialization::decodeImageView to unserialize an ImageView from a Stream

IOL-535: add a new extension for tiling information in ImageView instances

  • New class TilingInfoExtension
  • New provider ExtensionProvider
  • New method ImageView::tilingInfo

IOLink 1.1.1 - 2021-05-30

IOL-570: toString() and <strong>repr</strong> available for new objects

New toString() methods for:

  • ArrayX
  • View
  • Matrix
  • Writer
  • RandomAccess
  • StreamAccess

IOLink 1.1.0 - 2021-03-29

IOL-482: C# - new friendly variant of ReadRegion in IOLink

New ReadRegion which directly returns a byte[] in ImageView

IOL-427: Add possibility in Python to initialize a Vector/VectorX with an iterable

Possibility to write:

v = iolink.Vector2u64([2, 3]) vx = iolink.VectorXu64([2, 3, 4]) or v = iolink.Vector2u64((2, 3)) vx = iolink.VectorXu64((2, 3, 4))

IOL-450: Make capabilities more user friendly in Python

Capabilities enums are now implicitly convertible into their counterpart capability sets. Enabling user to use capabilities.has(ImageCapability_READ) syntax Instead of the more verbose capabilities.has(ImageCapabilitySet(ImageCapability_READ))

IOL-500: Add simple method in Python to read a region from an ImageView

In python, it is now possible to write: buffer = imageView.read_region(region)

IOL-466: enhance MetadataNodeHelper

Add new MetadataNodeHelper::exists method that tests if the given path exists in the children tree.

IOL-505: Add 'support' method for all objects with capabilities

New methods added:

  • RandomAccess::support
  • StreamAccess::support
  • MultiImageView::support

IOL-272: Add ToString methods to most common objects

ToString() methods have been added to following objects:

  • ImageView
  • MultiImageView
  • Region and RegionX
  • LodImageView
  • ImageProperties
  • SpatialCalibrationProperty
  • ImageInfoProperty

IOL-525: Fix ambiguity of MultiImageViewFactory::unstack in Python

MultiImageViewFactory.unstacksplitted into two different versions:

  • MultiImageViewFactory.unstack_dimension
  • MultiImageViewFactory.unstack_dimension_index

IOLink 1.0.0 - 2021-01-20

IOL-514: Fix C# wrapping issues

In order to wrap the API in C#, we had to modify the HTTPHeaders API, by changing the definition of Entry. Entry is now a struct with two fields: name and value.

IOL-460: Remove lockers for threadsafety access to improve performance

Add makeThreadSafe method in ImageViewFactory to make any ImageView threadsafe

IOL-441: Homogenize integers in API

All over the API, unsigned integers types have migrated from uint8_t oruint64_t to size_t.

In Indexer, all the order arguments or accessors changed to manipulate VectorXu64 instead of VectorXu8.

IOL-436: Impact of API review on properties

PropertyMap class is renamed into ImageProperties. ComponentInfoProperty, SampleInfoProperty and DimensionInfoProperty classes are removed

Creation of ImageInfoProperty class which gathers all properties from removed classes:

  • DimensionInfoProperty::type() moved into ImageInfoProperty::axesInterpretation()
  • Creation of ImageInfoProperty::setAxesInterpretation()
  • SampleInfoProperty::interpretation() moved into ImageInfoProperty::interpretation()
  • SampleInfoProperty::hasAlpha() moved into ImageInfoProperty::hasAlpha()
  • SampleInfoProperty::setAlpha() moved into ImageInfoProperty::setAlpha()
  • ComponentInfoProperty::bitDepth() moved into ImageInfoProperty::bitDepth()
  • ComponentInfoProperty::setBitDepth() moved into ImageInfoProperty::setBitDepth()
  • ComponentInfoProperty::valueRange() moved into ImageInfoProperty::valueRange()
  • ComponentInfoProperty::setValueRange() moved into ImageInfoProperty::setValueRange()

Following methods are removed:

  • ImageProperties::componentInfo()
  • ImageProperties::sampleInfo()
  • ImageProperties::dimensionInfo()

Creation of ImageProperties::imageInfo() method to access to ImageInfoProperty object.

direction() and setDirection() methods in SpatialCalibrationProperty are respectively renamed into directions() and setDirections().

In SpatialDirections, following methods are renamed:

  • columnDir into columnDirection
  • rowDir into rowDirection
  • sliceDir into sliceDirection

IOL-453: Move Endianess converter in DataConverter class

EndiannessConverter class is removed. Its internal convert method is renamed endianReverse and moved into DataConverter class

IOL-448: Arrays API review

  • Removing template class Array1 and all its aliases.
  • Renaming ArrayX::dimension to dimensionCount

IOL-445: API review on Region class

Following methods in Region and RegionX classes are renamed from:

  • dimension into dimensionCount
  • numCells into elementCount
  • slice into extractSliceFromAxis

IOL-456: Implementation of RegionXDivider is made private and renaming

RegionXDivider::maxElementByChunk method is renamed into elementCountByChunk.

IOL-446: Rework of Indexer API

  • Rename Indexer::order into layout
  • Rename Indexer::sampleCount into elementCount
  • Remove static methods Indexer::computeStride, Indexer::computeOrder, and Indexer::computeElementCount from public API

IOL-455: Miscellaneous API changes

ComposedView interface is removed.

IOL-447: API review impact on DataType and DataTypeId

DataType::dimension() method is renamed into elementCount()

DataTypeId is now a real enumerator which contains the numerical identifier of each DataType.

IOL-452: Changes after DataAccess API review

Remove BUFFER_INFO capability from StreamAccess. Removing the methods StreamAccess::size and StreamAccess::capacity.

Adding MEMORY_ACCESS capability to StreamAccess and RandomAccess, adding three new methods:

  • buffer(), that return the internal memory buffer.
  • bufferReadOnly(), that return the internal memory buffer in read only.
  • bufferSize(), that return the internal memory buffer size in bytes.

ALL capability removed from StreamAccess and RandomAccess.

Rework of the class HTTPHeaders that previously was a std::map alias. It is now a fully defined class on its own.

Some factories methods were renamed:

  • StreamAccess::loadInMemory to StreamAccess::copyInMemory
  • RandomAccess::loadInMemory to RandomAccess::copyInMemory

The arguments of RandomAccess::fromBuffer were inverted, now being (buffer, size) from (size, buffer).

IOL-454: API Review impact on Matrix

In Matrix class, added new constructor with C-array parameter. Added operator() to access to an element.

IOL-444: Changes after vector API review

VectorX::squaredLength and Vector::squaredLength now return a double.

The Vector constructor using padding is now reduced to only manage the conversion of a vector into a vector with a different type.

IOL-463: Add method to check the presence of a child in a MetadataNode

New method MetadataNode::hasChild

IOLink 0.30.0 - 2021-12-16

IOL-408: MetadataNode refactored as a class

MetadataNode is not an interface anymore. child(const std::string & key) method now raises an exception if the key is not found

Creation of 2 objects to iterate on MetadataNode's children:

  • MetadataNodeIterator
  • ConstMetadataNodeIterator

Following methods of MetadataNodes now return a MetadataNodeIterator object.

  • begin()
  • end()

Following methods of MetadataNodes now return a ConstMetadataNodeIterator object.

  • cbegin()
  • cend()

IOL-434: Add extension system on views

New Extension interface, that will be inherited by all future view extensions.

New virtual method View::extension that should be used to get a specific extension on a view.

IOL-437: Refactor ImageViewFactory after API Review

In ImageViewFactory class:

  • loadInMemory method is renamed into copyIntoMemory
  • allocateOnDisk method is renamed into createOnDisk
  • loadOnDisk method is renamed into copyOnDisk
  • reinterpretOrder is renamed into reinterpretAxes
  • extractRegionPacked is renamed into extractAdjustedRegion
  • createOnDisk and copyOnDisk methods do not take a file path in argument, but a directory path. An exception is now raised if the directory does not exist.
  • copyInMemory now raises an exception if properties are not valid.
  • flip method raises an exception if READ capability is not available for input image or if properties of input image are not valid.

IOL-438: Remove optional parameters from public API

Functions that had default parameters, are now splitted in two versions, to avoid default parameters:

  • ImageViewFactory::allocate
  • ImageViewFactory::createOnDisk
  • ImageViewFactory::fromBuffer
  • ImageViewFactory::fromRandomAccess
  • ImageViewFactory::uniform
  • ImageViewFactory::interlace
  • DataType::DataType

Default argument of MetadataNodeHelper::createPath removed.

IOL-435: ImageView API changes after API review

ImageView::dimension renamed to ImageView::dimensionCount and made non-virtual. It is now only a shortcut, and is not polymorphic any more.

Changes in ImageCapability: ALL removed and BUFFER renamed to MEMORY_ACCESS.

New ImageView::support shortcut method to check an ImageView capabilities easily.

New ImageView::bufferReadOnly constant variant of ImageView::buffer method, so it can be used on constant ImageView instances too. It returns a read only buffer to not alter the instance.

IOLink 0.30.0 - 2021-12-16

IOL-408: MetadataNode refactored as a class

MetadataNode is not an interface anymore. child(const std::string & key) method now raises an exception if the key is not found

Creation of 2 objects to iterate on MetadataNode's children:

  • MetadataNodeIterator
  • ConstMetadataNodeIterator

Following methods of MetadataNodes now return a MetadataNodeIterator object.

  • begin()
  • end()

Following methods of MetadataNodes now return a ConstMetadataNodeIterator object.

  • cbegin()
  • cend()

IOL-434: Add extension system on views

New Extension interface, that will be inherited by all future view extensions.

New virtual method View::extension that should be used to get a specific extension on a view.

IOL-437: Refactor ImageViewFactory after API Review

In ImageViewFactory class:

  • loadInMemory method is renamed into copyIntoMemory allocateOnDisk method is renamed into createOnDisk loadOnDisk method is renamed into copyOnDisk reinterpretOrder is renamed into reinterpretAxes extractRegionPacked is renamed into extractAdjustedRegion

createOnDisk and copyOnDisk methods do not take a file path in argument, but a directory path. An exception is now raised if the directory does not exist. copyInMemory now raises an exception if properties are not valid

flip method raises an exception if READ capability is not available for input image or if properties of input image are not valid.

IOL-438: remove optional parameters from public API

Functions that had default parameters, are now splitted in two versions, to avoid default parameters:

  • ImageViewFactory::allocate
  • ImageViewFactory::createOnDisk
  • ImageViewFactory::fromBuffer
  • ImageViewFactory::fromRandomAccess
  • ImageViewFactory::uniform
  • ImageViewFactory::interlace
  • DataType::DataType

Default argument of MetadataNodeHelper::createPath removed.

IOL-435: change ImageView API after review

ImageView::dimension renamed to ImageView::dimensionCount and made non-virtual. It is now only a shortcut, and is not polymorphic any more.

Changes in ImageCapability: ALL removed and BUFFER renamed to MEMORY_ACCESS.

New ImageView::support shortcut method to check an ImageView capabilities easily.

New ImageView::buffer constant variant, so it can be used on constant ImageView instances too. It returns a read only buffer to not alter the instance.

IOLink 0.29.0 - 2021-11-17

IOL-390: Calibration property rework to work in 3D space

Rework of the calibration property, migrated from CalibrationProperty to SpatialCalibrationProperty in order to show that it handles 3D calibration now. With this migration comes other changes:

  • Its methods origin() and spacing() now return const Vector3d&
  • Method units(index) is now more simple: const std::string& unit()
  • New method direction()

New class for handling directions: SpatialDirections.

Method PropertyMap::fromShape renamed fromDataType, as it only takes a DataType now.

IOL-295: Cross product and normalization for vectors

New methods for Vector and VectorX:

  • void normalize() to normalize a vector.
  • Vector(X) cross(const Vector(X)& v) const to compute the cross product of two vectors.

IOL-415: New class to create a flag system from an enum

  • New template class FlagSet used to create a flag system from an enum.
  • New macro IOLINK_DEFINE_ENUM_BITWISE_OPERATORS(EnumType) to create bitwise operators on enums, in association with FlagSet.

IOL-409: ImageView refactoring for runtime capabilities

All ImageView derived classes (ReadImageView, WriteImageView, ShapableImageView, MemoryImageView) removed and their methods merged into ImageView.

New enum ImageCapability to handle ImageView capabilities, wrapped into the new class ImageCapabilitySet, using FlagSet. The new method ImageView::capabilities return an instance of this class. This should be used to check the capabilities of the view from now on.

Example to check a capability: image->capabilities().has(ImageCapability::READ)

Changes to ImageViewProvider:

  • isRead and toRead removed
  • isWrite and toWrite removed
  • isShapable and toShapable removed
  • isMemory and toMemory removed

IOL-375: reinforce DataAccess interfaces contract

  • ReadRandomAccess::read and WriteRandomAccess::write methods contract have been enriched
  • StreamAccess::good method contract have changed and now provides a default implementation
  • StreamAccess::eof method contract has changed
  • StreamAccess::fail method added
  • Methods contract in ReadStreamAccess, WriteStreamAccess and SeekStreamAccess interfaces have been enriched

IOL-411: DataAccess refactoring to make capabilities Runtime

All StreamAccess derived classes (ReadStreamAccess, WriteStreamAccess, MemoryStreamAccess) removed and their methods merged into StreamAccess.

New enum StreamAccessCapability to handle StreamAccess capabilities, wrapped into the new class StreamAccessCapabilitySet, using FlagSet. The new method StreamAccess::capabilities return an instance of this class. This should be used to check the capabilities of the stream from now on.

Example to check a capability: stream->capabilities().has(StreamAccessCapability::READ)

Changes to StreamAccessProvider:

  • isRead and toRead removed
  • isWrite and toWrite removed
  • isMemory and toMemory removed

All RandomAccess derived classes (ReadRandomAccess, WriteRandomAccess, ResizeRandomAccess) removed and their methods merged into RandomAccess.

New enum RandomAccessCapability to handle RandomAccess capabilities, wrapped into the new class RandomAccessCapabilitySet, using FlagSet. The new method RandomAccess::capabilities return an instance of this class. This should be used to check the capabilities of the random access from now on.

Example to check a capability: randomAcc->capabilities().has(RandomAccessCapability::READ)

Changes to RandomAccessProvider:

  • isRead and toRead removed
  • isWrite and toWrite removed
  • isMemory and toMemory removed

IOL-410: MultiImageView refactoring for runtime capabilities

All MultiImageView derived classes (ReadMultiImageView, WriteMultiImageView, ReadWriteMultiImageView) removed and their methods merged into MultiImageView.

New enum MultiImageCapability to handle MultiImageView capabilities, wrapped into the new class MultiImageCapabilitySet, using FlagSet. The new method MultiImageView::capabilities return an instance of this class. This should be used to check the capabilities of the view from now on.

Example to check a capability: mimage->capabilities().has(MultiImageCapability::READ)

Changes to MultiImageViewProvider:

  • isRead and toRead removed
  • isWrite and toWrite removed
  • isFull and toFull removed

IOLink 0.28.0 - 2021-10-07

IOL-379: Factory to flip ImageViews

New factories in ImageViewFactory to flip an ImageView:

  • std::shared_ptr<ReadImageView> ImageViewFactory::flip(std::shared_ptr<ReadImageView> image, uint8_t dimensionIndex)
  • std::shared_ptr<ReadImageView> ImageViewFactory::flip(std::shared_ptr<ReadImageView> image, ImageDimension dimension)

IOL-384: Update log level

  • Change enum LogLevel::OFF to LogLevel::LOG_OFF
  • Change enum LogLevel::CRITICAL to LogLevel::LOG_CRITICAL
  • Change enum LogLevel::ERR to LogLevel::LOG_ERR
  • Change enum LogLevel::WARNING to LogLevel::LOG_WARNING
  • Change enum LogLevel::INFO to LogLevel::LOG_INFO
  • Change enum LogLevel::DEBUG to LogLevel::LOG_DEBUG
  • Change enum LogLevel::TRACE to LogLevel::LOG_TRACE

IOL-391: Remove accessor to MemoryLayout in Indexer class

  • MemoryLayout Indexer::layout() const removed
  • Indexer(const VectorXu64& shape, const VectorXu64& stride, const VectorXu8& order) constructor added

IOLink 0.27.0 - 2021-09-09

IOL-389: Add new factory to wrap a StreamAccess into standard IOStream

  • std::shared_ptr<std::iostream> StreamAccessFactory::toStdStream(std::shared_ptr<StreamAccess> stream) factory created

IOL-388: Add new factory to subSample an ImageView

  • std::shared_ptr<ReadImageView> ImageViewFactory::subSample(std::shared_ptr<ReadImageView> image, uint64_t step) factory created

IOL-380: Support for 1D arrays

Array class renamed to ArrayX, so all the aliases have changed too. A new array class is added, Array1, aimed at containing 1D arrays of data. ArrayX now uses Array1 internally.

IOL-381: Add a factory to address a subset of a RandomAccess

Add factories into RandomAcessFactory that enable to proxy a subset of a source RandomAccess:

  • RandomAccessFactory::extractRegion(src, offset)
  • RandomAccessFactory::extractRegion(src, offset, size)

IOLink 0.26.0 - 2021-07-22

IOL-362: Uniformization of factories

Following methods now returns std::shared_ptr<ReadImageView> instead of std::shared_ptr<ImageView>:

  • ImageViewFactory::allocateOnDisk
  • ImageViewFactory::loadOnDisk both methods
  • ImageViewFactory::fromBuffer

Following methods now takes a std::shared_ptr<ReadStreamAccess> instead of std::shared_ptr<StreamAccess>:

  • StreamAccessFactory::loadInMemory
  • StreamAccessFactory::toStdIStream

StreamAccessFactory::toStdOStream now takes a std::shared_ptr<WriteStreamAccess> instead of std::shared_ptr<StreamAccess>

Behavior change for adaptDynamicRange and adaptDataType methods. Now they don't accept type dimension modifications. An exception is raised if requested.

MultiImageViewFactory::createMultiImageView methods are renamed into MultiImageViewFactory::create new MultiImageViewFactory::createFromList method to create a MultiImageView from an array of ReadImageView

IOL-355: New checkers for IOLink interface implementation

Added a set of checkers:

  • iolink\tool\checker\ComposedViewChecker.h
    • bool ComposedViewChecker::check(std::shared_ptr<ComposedView> image) to check ComposedView interface implementation
  • iolink\tool\checker\DataStorageChecker.h
    • bool DataStorageChecker::check(std::shared_ptr<DataStorage> storage, const std::string& resourceId) to check DataStorage interface implementation
  • iolink\tool\checker\ImageViewChecker.h
    • bool ImageViewChecker::check(std::shared_ptr<ImageView> image) to check ImageView interface implementation
  • iolink\tool\checker\LodImageViewChecker.h
    • bool LodImageViewChecker::check(std::shared_ptr<LodImageView> image) to check LodImageView interface implementation
  • iolink\tool\checker\MultiImageViewChecker.h
    • bool MultiImageViewChecker::check(std::shared_ptr<MultiImageView> image) to check MultiImageView interface implementation
  • iolink\tool\checker\RandomAccessChecker.h
    • bool RandomAccessChecker::check(std::shared_ptr<RandomAccess> image) to check RandomAccess interface implementation
  • iolink\tool\checker\StreamAccessChecker.h
    • bool StreamAccessChecker::check(std::shared_ptr<StreamAccess> image) to check StreamAccess interface implementation

IOL-364: Hide attributes of public classes

Some parameters types changed in Indexer to fix some issues and better fit the internal data:

  • Indexer(const VectorXu64& shape, const VectorXu64& order) to Indexer(const VectorXu64& shape, const VectorXu8& order)
  • computeStride(const VectorXu64& shape, const VectorXu64& order) to computeStride(const VectorXu64& shape, const VectorXu8& order)

IOL-343: Rework of Array for interoperability

Full rework of Array class that is now only template for the value type. It can only be used with its aliases, as Vector and Region classes.

There is special NumPy interoperability function for Array in Python:

  • to_numpy: to convert an Array instance to a NumPy array, without copy
  • from_numpy: static method to build an Array instance from a NumPy array, copying the content of the NumPy array into the IOLink Array.

IOL-361: Rework of ImageView API

All headers file linked to ImageView capabilities are now merged into ImageView.h, so the following headers are removed:

  • ReadImageView.h
  • WriteImageView.h
  • ShapableImageView.h
  • RawMemoryView.h
  • MemoryImageView.h

Some modifications to ImageView capabilities:

  • RawMemoryView merged into MemoryImageView
  • New indexer method in MemoryImageView to get the memory layout of data
  • Default implementation for ImageView::dimension
  • Default implementation for ReadImageView::read
  • Default implementation for WriteImageView::write
  • Default implementation for MemoryImageView::bufferSize

IOLink 0.25.0 - 2021-06-24

IOL-342: new Matrix type

Adds a new Matrix type that is designed to do an arithmetic matrix job. Not all classic operations are implemented yet, as it is meant for interoperability first.

This class is a template one, and as its siblings Vector and VectorX its aliases must be used instead of the template class itself. These aliases follow the same pattern as vectors: Matrix3f will describe a three rows and columns square matrix stroring floats, and Matrix4d will describe a four rows and columns square matrix storing doubles.

The aliases are the following:

  • Matrix3f and Matrix3d for square matrices with three columns and rows
  • Matrix4f and Matrix4d for square matrices with four columns and rows

IOL-356: Added 2 new methods to load an ImageView onto disk

  • New methods ImageViewFactory::loadOnDisk added, with or without file path.

IOL-312: Remove Converter method

  • ImageViewFactory::convert method is removed You can use ImageDev for any colorspace conversion or operation on alpha channel

IOL-346: Versioning utilities

New Versioning class to handle version services, as getting the version info, the version string or checking the library compatibility.

Two new constants defined in the header, in order to support these versioning utilities: IOLINK_VERSION and IOLINK_VERSION_STRING.

IOL-336: Modify the function to import NumPy arrays

The method NumpyInterop.from_numpy_array is changed to have a new required argument that decribe the ImageType of the output ImageView.

The old version that only take a NumPy array cannot be used now.

IOLink 0.23.0 - 2021-04-29

IOL-299: Add new method to create an ImageView from a mapped file in memory.

  • New method ImageViewFactory::allocateOnDisk that takes a file path.

IOL-322: Add method to convert an ImageView into planar ImageView

ImageViewFactory::disassembleChannels new method is created ImageViewFactory::assembleChannels method can now manage the case when CHANNEL dimension is not in last position

New (Returned) Mapped File Storage

When using a FileSystemStorage, the method openRandomAccess now works, but only for READ_WRITE capacities.

In addition, a new factory was added: RandomAccessFactory::mapFile. It maps a file in memory and returns a RandomAccess on it.

IOLink 0.22.0 - 2021-03-25

IOL-326: Add method to apply specific properties/metadata to a ReadImageView without impact on originals

  • New method ImageViewFactory::fromImageView(view, properties, metadata)

IOL-330: Remove resetProperties parameter from reshape method

ShapableImageView::reshape, resetProperties parameter removed

IOL-323: Fix RandomAccessProvider method name

RandomAccessProvider::toRead(std::shared_ptr<DataAcccess>) -> RandomAccessProvider::toRandom

IOL-310: Add units in CalibrationProperty

  • New constructor in CalibrationProperty that take a list of strings to use as units.
  • New method CalibrationProperty::unit(index) to get the unit for a given axis.

IOLink 0.21.0 - 2021-02-25

IOL-319: Improve ImageViewFactory::stack method to handle all possible cases

  • New method ImageView::stack(std::shared_ptr<ReadMultiImageView> view) added to stack frames from a MultiImageView without specifying the new dimension
  • Behavior change for ImageView::stack(std::shared_ptr<ReadMultiImageView> view, ImageDimension newDimension). Method now handles all possible new dimensions.

IOL-307: New version of Storage interface

Storage classes and subclasses all renamed to Access variants:

  • Storage -> DataAccess
  • StreamStorage -> StreamAccess
  • ReadStreamStorage -> ReadStreamAccess
  • WriteStreamStorage -> WriteStreamAccess
  • SeekStreamStorage -> SeekStreamAccess
  • MemoryStreamStorage -> MemoryStreamAccess
  • RandomAccessStorage -> RandomAccess
  • ReadRandomAccessStorage -> ReadRandomAccess
  • WriteRandomAccessStorage -> WriteRandomAccess
  • SeekRandomAccessStorage -> SeekRandomAccess
  • MemoryRandomAccessStorage -> MemoryRandomAccess
  • StreamStorageProvider -> StreamAccessProvider
  • StreamStorageFactory -> StreamAccessFactory
  • RandomStorageProvider -> RandomAccessProvider
  • RandomStorageFactory -> RandomAccessFactory

ImageViewFactory method that create an ImageView from a RandomAccess now renamed from openStorage to openRandomAccess.

New DataStorage interface that have nothing to do with the old Storage one. It is used to manage and open instances of DataAccess. Factories method that open DataAccess on files now associate a storage to these accessors. DataAccess instances opened on HTTP resources associate a storage to these too.

You can easily open accessors relative to an already opened accessor:

auto stream = StreamAccessFactory::openFile("/home/user/folder/file.txt");
auto storage = stream->storage();
auto siblingFile = storage->openStreamAccess("sibling.txt", AccessCapabilities::READ_WRITE);

IOLink 0.20.0 - 2021-01-29

IOL-294: Possibility to create/allocate an in-memory stream

  • StreamStorageFactory::allocate(size_t size = 0) creates a MemoryStreamStorage with a given size, and which is resized if necessary.
  • New MemoryStreamStorage interface which represents a stream with all capacities (READ, WRITE, SEEK)

IOL-309: new methods in ImageType

  • void ImageType::remove(uint8_t index) method added to remove a dimension identified by its position in a shape
  • ImageDimension ImageType::dimension(uint8_t index) const method added to get the ith dimension at given position in a shape

IOLink 0.19.0 - 2021-01-07

IOL-282: Python naming conventions

Python Method names are now lowercase, with words separated by underscores. For example, ReadImageView.readRegion() is renamed into ReadImageView.read_region().

IOLink 0.18.0 - 2020-12-03

IOL-273: New types for symmetric matrices

  • New type interpretation: DataTypeInterpretation::SYMMETRIC_MATRIX
  • New symmetric matrices types:
    • DataTypeId::SYM_MATRIX2_FLOAT
    • DataTypeId::SYM_MATRIX2_DOUBLE
    • DataTypeId::SYM_MATRIX3_FLOAT
    • DataTypeId::SYM_MATRIX3_DOUBLE

IOLink 0.17.0 - 2020-11-05

IOL-274: Deinterlace and unstack multi-channel images now provide ImageInterpretation as metadata

  • PropertyMap::clone() const method added
  • PropertyMap::isCompatibleWith(VectorXu64 shape, DataType type) const method added to check properties validity
  • MetadataNodeHelper::createPath(std::shared_ptr<MetadataNode> origin, const std::string& path, std::shared_ptr<VariantDataValue> value) method added to create a metadata tree following a path string.
  • ImageType::indexDimension(ImageDimension dimension) method added to determine dimension position in a shape
  • uint8_t SampleInfoProperty::channelCount(ImageInterpretation interpretation) method added to give the number of channel in a specific ImageInterpretation.
  • ImageViewFactory::interlace(std::shared_ptr<ReadMultiImageView> multiView, ImageInterpretation newInterpretation = ImageInterpretation::UNKNOWN, bool hasAlpha = false) method now takes an optional hasAlpha parameter
  • ImageViewFactory::allocate(const VectorXu64& shape, DataType type, std::shared_ptr<PropertyMap> properties = nullptr, std::shared_ptr<MetadataNode> metadata = nullptr) method now takes optional properties and metadata as parameters
  • std::shared_ptr<ReadMultiImageView> MultiImageViewFactory::unstack(std::shared_ptr<ReadImageView> imageView, ImageDimension dimension) method added to unstack following an ImageDimension

Important: In factories, properties as argument, or in given views are systematically parsed to check their validity before any processing. This helps to guarantee the behavior of IOLink services. You can activate IOLink logs for more details in case of error.

IOL-276: Homogenize <tt>PropertyMap::fromProperties</tt> prototype with other equivalent method

  • PropertyMap::fromProperties method now takes a reference as third parameter

IOL-270: fromNumpyArray can directly reorder dimensions

  • Python method orderFromNumpyArray is added to take a sequence of ImageDimension as optional argument to reorder dimensions during conversion of Numpy array into ImageView this method now returns a ReadImageView
  • Python wrapping is upgraded to allow the creation of a MultiImageView from a list of ImageView: MultiImageViewFactory.create
  • Python wrapping is upgraded to allow the construction of an ImageType from a list of ImageDimension

IOL-271: Reinterpret ImageType and re-order dimensions

  • new uint64_t ImageType::dimensionCount() const method to count the number of dimensions in an ImageType
  • new ImageType::ImageType(const ImageDimension* dimensionsList, uint8_t count) constructor
  • new ImageType(std::initializer_list<ImageDimension> dimensionsList) constructor
  • new static std::shared_ptr<ReadImageView> reinterpret(std::shared_ptr<ReadImageView> image, ImageType newImageType) method to change ImageType of an ImageView
  • new static std::shared_ptr<ReadImageView> reinterpretOrder(std::shared_ptr<ReadImageView> image, const ImageDimension* dimensionsList, uint8_t count) method to re-order dimensions and change ImageType
  • void ImageType::add(ImageDimension dimension) is modified to only modify current object - const is removed
  • void ImageType::add(ImageType other) is modified to only modify current object - const is removed
  • void ImageType::remove(ImageDimension dimension) is modified to only modify current object - const is removed
  • void ImageType::remove(ImageType other) is modified to only modify current object - const is removed

IOLink 0.16.0 - 2020-10-09

IOL-259: Now able to reset properties or not when reshaping a view

  • ShapableImageView::reshape have a new argument resetPropeties, defaulted to true

IOL-269: Method 'ImageType::has' become const

  • bool has(ImageDimension dimension) method becomes const

IOL-268: New convert method to change color space

  • New ImageViewFactory::convert method to change the colorspace and the alpha channel of an ImageView
  • New ImageViewProvider::toReadOnly method to return a view with only READ capacity
  • New ImageViewProvider::toWriteOnly method to return a view with only WRITE capacity

IOLink 0.15.0 - 2020-09-08

IOL-262: Add loadInMemory method for StreamStorages

  • New StreamStorageFactory::loadInMemory method

IOL-260: Add peek for IStreams

  • New IStreamStorage::peek method

IOLink 0.14.0 - 2020-08-13

IOL-234: Properties MkII

  • Removed CalibrationProperty::isDefault
  • New property class ComponentInfoProperty
  • Removed enum ImageChannel
  • Reworked SampleInfoProperty, only interpretation and hasAlpha fields remain
  • New ImageDimension enum
  • Removed DimensionInterpreation enum
  • New ImageType flag system for image dimensions description
  • Reworked DimensionInfoProperty, only a field type remain
  • PropertyMap is now a class, and is mainly rewamped.
  • PropertyMap is now immutable, a copy must be made to modify it
  • New method WriteImageView::setProperties
  • Change to ReadImageView::properties(), it now returns a std::shared_ptr<const PropertyMap>
  • Method ImageViewFactory::stack change to take an ImageDimension instead of a Dimensioninterpretation
  • Removed ImageViewFactory::extractChannel variant that used an ImageChannel

IOLink 0.13.0 - 2020-07-15

IOL-245: Add a 'slice' method for Region and RegionX

  • New Region::slice method
  • New RegionX::slice method

IOL-244 : new Writer interface

  • MetadataValue interface is replaced by VariantDataValue (it allows to store any values, and not only for metadata) its header is no more in iolink/metadata, but directly in iolink/
  • Writer interface contains 3 new virtual methods

IOL-236: Correct ImageInterpretations values

  • CIE_XYZ_CHROMACITY renamed to CIE_XYZ_CHROMATICITY
  • RGB_CHROMACITY renamed to RGB_CHROMATICITY
  • YUV is now different from YCC
  • HSB removed as it is an alias of HSV
  • CMYK added

IOL-228: New public logging interface

  • Remove void Logger::setLevel(LogLevel level)
  • Remove void Logger::setFlushLevel(LogLevel level)
  • Add void Logger::init(LogeLevel level)
  • Add LogLevel Logger::logLevel()

IOL-238 : Added provider for LodImageView

  • LodImageViewProvider now provides services for LodImageView
  • C# wrapping for LodImageViewProvider

IOL-232 : User friendly ImageViewFactory.Uniform in C#

  • MetadataValueConverter now provides a toString method to convert any metadata into a string
  • C# wrapping of the helper MetadataValueConverter
  • ImageViewFactory.Uniform takes a System.Object as value instead of System.IntPtr

IOLink 0.12 - 2020-06-18

VectorX API consistency: pass VectorXu64 by reference when possible

  • ImageView::shape now returns a const VectorXu64&
  • ReadImageView::read and WriteImageView::write take a const VectorXu64& as index
  • ImageViewFactory::fromStorage take a const VectorXu64& as shape
  • RegionX::origin and RegionX::size now returns const VectorXu64&

IOLink 0.11 - 2020-05-19

IOL-182 : Factory to interlace MultiImageView instances

  • Add new overload of MultiImageViewFactory::createMultiImageView that takes an initializer list
  • New ImageViewFactory::interlace method to interlace MultiImageView instances into ImageView instances
  • Add equality and inequality operators for CalibrationProperty
  • Add equality and inequality operators for DimensionInfoProperty