![]() |
IOLink C# 1.11.0
|
In C++ and Python only:
In C#, these names remain the same due to technical reasons.
New RawBuffer method in ImageView in dotnet only.
In C#, new extensions for ImageViews:
byte[] Read(VectorXu64) which directly returns a byte arrayvoid Read<T>(VectorXu64, T[]) which takes a typed buffer as argumentT[] Read<T>(VectorXu64) which returns a typed buffervoid Write<T>(VectorXu64, T[]) which takes a typed buffer as argumentvoid Write<T>(VectorXu64, T ) which takes a typed value as argument (for scalar types)New class PandasInterop in Python iolink module, after importing iolink.pandas_interop. It provides two methods: to_pandas and from_pandas.
Added methods create_from_pointer and to_pointer to ImageView in Python.
ColumnUnitExtension for DataFrameViewDataFrameView: unit and setUnit.data() and sizeInBytes() methods added to Vector and VectorX, respectively to get data pointer and to know its size in bytes.
New matrix operations:
Added new factories TransformMatrix3Factory and TransformMatrix4Factory, to be used for 2D and 3D transforms respectively.
In C++:
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.VariantDataValueConverter::to<<type>>(std::shared_ptr<VariantDataValue> variant, size_t index) methods. This parameter allows to select the value to convert.In C#:
VariantDataValueConverter.To<<type>>Array(std::shared_ptr<VariantDataValue> value, <<type>> [] values) to retrieve all values from a VariantDataValue into a pre-allocated array.VariantDataValueConverter.To<<type>>(std::shared_ptr<VariantDataValue> value, uint index) to convert the Nth value of a VariantDataValue.In Python:
VariantDataValue object so as to retrieve one specific value, or a range of value from the VariantDataValue.Add new class UidGenerator that defines the constant UNDEFINED_UID and the method generate, that helps generate a new UID.
New Indexer methods:
dtype(): to get the underlying data typebyteStride(): to get the byte strides of the indexerbyteStride(index): to get a specific byte stride of the indexerbyteCount(): returning the total number of bytes indexedisContinuous(): checking if the indexed elements are continuous in memoryNew 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.
ImageViewFactory::fromRandomAccess now raises an exception instead of returning a nullptr when randomAccess size is invalid.
ImageView.read_region and ImageView.write_region methods accept protocol buffer in argument
ImageViewFactory::stack method has an additional parameter to set the thread count.
In Python only: ImageView.imageInterpretation property is renamed into ImageView.image_interpretation to uniformize with axes_interpretation property.
New methods for various view types that read data, in order to make a version that return an array:
StreamAccessExtension adding byte[] Read(this StreamAccess obj, uint size)RandomAccessExtension adding byte[] Read(this RandomAccess obj, uint offset, uint size)ImageViewExtension adding T[] ReadRegion<T>(this ImageView image, RegionXu64 region)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)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.DataFrameView.read method you can now ommit the dst paramaters, and if so, the read data will be returned by the method itself.ImageViewFactory.uniform can now be called using a single value, a list or an array.
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.
New Method View::viewOrigin() to access to ViewOriginExtension. ViewOriginExtension is a new extension which allows getting information about view data.
Added method DataFrameView::toString in C++ _repr_ and _repr_html_ methods are available in Python.
New method DependencyGraph::hasCommonAncestor
Adding a new method to simply set the value of a DataFrameView cell:
setAt in C++SetAt in C#set_at in PythonNew DataFrameViewFactory::allocate() method without parameter to create an empty (no row, no column) in-memory DataFrameView.
Following methods are added to ImageView to get properties values:
And also methods to set the values:
New extension class: ParallelAccessExtension. Provides a method to retrieve a ParallelAccessCapability flagSet which indicates available capabilities for parallel accesses.
New methods in Serialization:
encodeArrayX with variants for all ArrayX typesdecodeArrayX with variants for all ArrayX typesAdded 2 new methods:
Serialization::encodeDataFrameView to encode a DataFrameView into a streamSerialization::decodeDataFrameView to decode a DataFrameView from a streamNew methods added:
Serialization::decodeMatrix3f and Serialization::encodeMatrix3fSerialization::decodeMatrix4f and Serialization::encodeMatrix4fSerialization::decodeMatrix3d and Serialization::encodeMatrix3dSerialization::decodeMatrix4d and Serialization::encodeMatrix4dNew ArrayX::toString method behavior that displays the content of the array (Numpy-style)
Added methods for each language interface, as it is not C++ wrapped. In C++:
at<T>template method, one taking an index as the column argument, and one taking the column name In C#:At<T> method In Python:at methodDataFrameViewFactory class to create DataFrameView instancesoperator== and operator!= method for ArrayX.to_raw_io in StreamAccess to retrieve the RAW IOBase adapter for the current stream.RawIOInterop static class to do the same operation on a StreamAccess.Implementation of missing constructors in RegionX:
Both NumpyInterop.order_from_numpy_array and NumpyInterop.from_numpy_array methods have now 2 optional arguments:
Equality operators (!= and ==) are now available for ImageInfoProperty and SpatialCalibrationProperty.
ImageType(uint64_t val)ImageType::value() which returns the internal integer valueTwo methods added:
Serialization::encodeImageView to serialize an ImageView into a StreamSerialization::decodeImageView to unserialize an ImageView from a StreamTilingInfoExtensionExtensionProviderImageView::tilingInfoNew toString() methods for:
ArrayXViewMatrixWriterRandomAccessStreamAccessNew ReadRegion which directly returns a byte[] in ImageView
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))
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))
In python, it is now possible to write: buffer = imageView.read_region(region)
Add new MetadataNodeHelper::exists method that tests if the given path exists in the children tree.
New methods added:
RandomAccess::supportStreamAccess::supportMultiImageView::supportToString() methods have been added to following objects:
MultiImageViewFactory.unstacksplitted into two different versions:
MultiImageViewFactory.unstack_dimensionMultiImageViewFactory.unstack_dimension_indexIn 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.
Add makeThreadSafe method in ImageViewFactory to make any ImageView threadsafe
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.
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()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 columnDirectionrowDir into rowDirectionsliceDir into sliceDirectionEndiannessConverter class is removed. Its internal convert method is renamed endianReverse and moved into DataConverter class
Array1 and all its aliases.ArrayX::dimension to dimensionCountFollowing methods in Region and RegionX classes are renamed from:
dimension into dimensionCountnumCells into elementCountslice into extractSliceFromAxisRegionXDivider::maxElementByChunk method is renamed into elementCountByChunk.
Indexer::order into layoutIndexer::sampleCount into elementCountIndexer::computeStride, Indexer::computeOrder, and Indexer::computeElementCount from public APIComposedView interface is removed.
DataType::dimension() method is renamed into elementCount()
DataTypeId is now a real enumerator which contains the numerical identifier of each DataType.
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::copyInMemoryRandomAccess::loadInMemory to RandomAccess::copyInMemoryThe arguments of RandomAccess::fromBuffer were inverted, now being (buffer, size) from (size, buffer).
In Matrix class, added new constructor with C-array parameter. Added operator() to access to an element.
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.
New method MetadataNode::hasChild
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:
MetadataNodeIteratorConstMetadataNodeIteratorFollowing methods of MetadataNodes now return a MetadataNodeIterator object.
begin()end()Following methods of MetadataNodes now return a ConstMetadataNodeIterator object.
cbegin()cend()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.
In ImageViewFactory class:
loadInMemory method is renamed into copyIntoMemoryallocateOnDisk method is renamed into createOnDiskloadOnDisk method is renamed into copyOnDiskreinterpretOrder is renamed into reinterpretAxesextractRegionPacked is renamed into extractAdjustedRegioncreateOnDisk 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.Functions that had default parameters, are now splitted in two versions, to avoid default parameters:
ImageViewFactory::allocateImageViewFactory::createOnDiskImageViewFactory::fromBufferImageViewFactory::fromRandomAccessImageViewFactory::uniformImageViewFactory::interlaceDataType::DataTypeDefault argument of MetadataNodeHelper::createPath removed.
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.
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:
MetadataNodeIteratorConstMetadataNodeIteratorFollowing methods of MetadataNodes now return a MetadataNodeIterator object.
begin()end()Following methods of MetadataNodes now return a ConstMetadataNodeIterator object.
cbegin()cend()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.
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 extractAdjustedRegioncreateOnDisk 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.
Functions that had default parameters, are now splitted in two versions, to avoid default parameters:
ImageViewFactory::allocateImageViewFactory::createOnDiskImageViewFactory::fromBufferImageViewFactory::fromRandomAccessImageViewFactory::uniformImageViewFactory::interlaceDataType::DataTypeDefault argument of MetadataNodeHelper::createPath removed.
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.
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:
origin() and spacing() now return const Vector3d&units(index) is now more simple: const std::string& unit()direction()New class for handling directions: SpatialDirections.
Method PropertyMap::fromShape renamed fromDataType, as it only takes a DataType now.
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.FlagSet used to create a flag system from an enum.IOLINK_DEFINE_ENUM_BITWISE_OPERATORS(EnumType) to create bitwise operators on enums, in association with FlagSet.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 removedisWrite and toWrite removedisShapable and toShapable removedisMemory and toMemory removedReadRandomAccess::read and WriteRandomAccess::write methods contract have been enrichedStreamAccess::good method contract have changed and now provides a default implementationStreamAccess::eof method contract has changedStreamAccess::fail method addedReadStreamAccess, WriteStreamAccess and SeekStreamAccess interfaces have been enrichedAll 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 removedisWrite and toWrite removedisMemory and toMemory removedAll 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 removedisWrite and toWrite removedisMemory and toMemory removedAll 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 removedisWrite and toWrite removedisFull and toFull removedNew 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)LogLevel::OFF to LogLevel::LOG_OFFLogLevel::CRITICAL to LogLevel::LOG_CRITICALLogLevel::ERR to LogLevel::LOG_ERRLogLevel::WARNING to LogLevel::LOG_WARNINGLogLevel::INFO to LogLevel::LOG_INFOLogLevel::DEBUG to LogLevel::LOG_DEBUGLogLevel::TRACE to LogLevel::LOG_TRACEMemoryLayout Indexer::layout() const removedIndexer(const VectorXu64& shape, const VectorXu64& stride, const VectorXu8& order) constructor addedstd::shared_ptr<std::iostream> StreamAccessFactory::toStdStream(std::shared_ptr<StreamAccess> stream) factory createdstd::shared_ptr<ReadImageView> ImageViewFactory::subSample(std::shared_ptr<ReadImageView> image, uint64_t step) factory createdArray 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.
Add factories into RandomAcessFactory that enable to proxy a subset of a source RandomAccess:
RandomAccessFactory::extractRegion(src, offset)RandomAccessFactory::extractRegion(src, offset, size)Following methods now returns std::shared_ptr<ReadImageView> instead of std::shared_ptr<ImageView>:
ImageViewFactory::allocateOnDiskImageViewFactory::loadOnDisk both methodsImageViewFactory::fromBufferFollowing methods now takes a std::shared_ptr<ReadStreamAccess> instead of std::shared_ptr<StreamAccess>:
StreamAccessFactory::loadInMemoryStreamAccessFactory::toStdIStreamStreamAccessFactory::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
Added a set of checkers:
iolink\tool\checker\ComposedViewChecker.hbool ComposedViewChecker::check(std::shared_ptr<ComposedView> image) to check ComposedView interface implementationiolink\tool\checker\DataStorageChecker.hbool DataStorageChecker::check(std::shared_ptr<DataStorage> storage, const std::string& resourceId) to check DataStorage interface implementationiolink\tool\checker\ImageViewChecker.hbool ImageViewChecker::check(std::shared_ptr<ImageView> image) to check ImageView interface implementationiolink\tool\checker\LodImageViewChecker.hbool LodImageViewChecker::check(std::shared_ptr<LodImageView> image) to check LodImageView interface implementationiolink\tool\checker\MultiImageViewChecker.hbool MultiImageViewChecker::check(std::shared_ptr<MultiImageView> image) to check MultiImageView interface implementationiolink\tool\checker\RandomAccessChecker.hbool RandomAccessChecker::check(std::shared_ptr<RandomAccess> image) to check RandomAccess interface implementationiolink\tool\checker\StreamAccessChecker.hbool StreamAccessChecker::check(std::shared_ptr<StreamAccess> image) to check StreamAccess interface implementationSome 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)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:
All headers file linked to ImageView capabilities are now merged into ImageView.h, so the following headers are removed:
ReadImageView.hWriteImageView.hShapableImageView.hRawMemoryView.hMemoryImageView.hSome modifications to ImageView capabilities:
RawMemoryView merged into MemoryImageViewindexer method in MemoryImageView to get the memory layout of dataImageView::dimensionReadImageView::readWriteImageView::writeMemoryImageView::bufferSizeAdds 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:
ImageViewFactory::loadOnDisk added, with or without file path.ImageViewFactory::convert method is removed You can use ImageDev for any colorspace conversion or operation on alpha channelNew 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.
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.
ImageViewFactory::allocateOnDisk that takes a file path.ImageViewFactory::disassembleChannels new method is created ImageViewFactory::assembleChannels method can now manage the case when CHANNEL dimension is not in last position
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.
ImageViewFactory::fromImageView(view, properties, metadata)ShapableImageView::reshape, resetProperties parameter removed
RandomAccessProvider::toRead(std::shared_ptr<DataAcccess>) -> RandomAccessProvider::toRandom
CalibrationProperty that take a list of strings to use as units.CalibrationProperty::unit(index) to get the unit for a given axis.ImageView::stack(std::shared_ptr<ReadMultiImageView> view) added to stack frames from a MultiImageView without specifying the new dimensionImageView::stack(std::shared_ptr<ReadMultiImageView> view, ImageDimension newDimension). Method now handles all possible new dimensions.Storage classes and subclasses all renamed to Access variants:
Storage -> DataAccessStreamStorage -> StreamAccessReadStreamStorage -> ReadStreamAccessWriteStreamStorage -> WriteStreamAccessSeekStreamStorage -> SeekStreamAccessMemoryStreamStorage -> MemoryStreamAccessRandomAccessStorage -> RandomAccessReadRandomAccessStorage -> ReadRandomAccessWriteRandomAccessStorage -> WriteRandomAccessSeekRandomAccessStorage -> SeekRandomAccessMemoryRandomAccessStorage -> MemoryRandomAccessStreamStorageProvider -> StreamAccessProviderStreamStorageFactory -> StreamAccessFactoryRandomStorageProvider -> RandomAccessProviderRandomStorageFactory -> RandomAccessFactoryImageViewFactory 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:
StreamStorageFactory::allocate(size_t size = 0) creates a MemoryStreamStorage with a given size, and which is resized if necessary.MemoryStreamStorage interface which represents a stream with all capacities (READ, WRITE, SEEK)void ImageType::remove(uint8_t index) method added to remove a dimension identified by its position in a shapeImageDimension ImageType::dimension(uint8_t index) const method added to get the ith dimension at given position in a shapePython Method names are now lowercase, with words separated by underscores. For example, ReadImageView.readRegion() is renamed into ReadImageView.read_region().
DataTypeInterpretation::SYMMETRIC_MATRIXDataTypeId::SYM_MATRIX2_FLOATDataTypeId::SYM_MATRIX2_DOUBLEDataTypeId::SYM_MATRIX3_FLOATDataTypeId::SYM_MATRIX3_DOUBLEPropertyMap::clone() const method addedPropertyMap::isCompatibleWith(VectorXu64 shape, DataType type) const method added to check properties validityMetadataNodeHelper::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 shapeuint8_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 parameterImageViewFactory::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 parametersstd::shared_ptr<ReadMultiImageView> MultiImageViewFactory::unstack(std::shared_ptr<ReadImageView> imageView, ImageDimension dimension) method added to unstack following an ImageDimensionImportant: 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.
PropertyMap::fromProperties method now takes a reference as third parameterorderFromNumpyArray 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 ReadImageViewMultiImageViewFactory.createuint64_t ImageType::dimensionCount() const method to count the number of dimensions in an ImageTypeImageType::ImageType(const ImageDimension* dimensionsList, uint8_t count) constructorImageType(std::initializer_list<ImageDimension> dimensionsList) constructorstatic std::shared_ptr<ReadImageView> reinterpret(std::shared_ptr<ReadImageView> image, ImageType newImageType) method to change ImageType of an ImageViewstatic std::shared_ptr<ReadImageView> reinterpretOrder(std::shared_ptr<ReadImageView> image, const ImageDimension* dimensionsList, uint8_t count) method to re-order dimensions and change ImageTypevoid ImageType::add(ImageDimension dimension) is modified to only modify current object - const is removedvoid ImageType::add(ImageType other) is modified to only modify current object - const is removedvoid ImageType::remove(ImageDimension dimension) is modified to only modify current object - const is removedvoid ImageType::remove(ImageType other) is modified to only modify current object - const is removedShapableImageView::reshape have a new argument resetPropeties, defaulted to truebool has(ImageDimension dimension) method becomes constImageViewFactory::convert method to change the colorspace and the alpha channel of an ImageViewImageViewProvider::toReadOnly method to return a view with only READ capacityImageViewProvider::toWriteOnly method to return a view with only WRITE capacityStreamStorageFactory::loadInMemory methodIStreamStorage::peek methodCalibrationProperty::isDefaultComponentInfoPropertyImageChannelSampleInfoProperty, only interpretation and hasAlpha fields remainImageDimension enumDimensionInterpreation enumImageType flag system for image dimensions descriptionDimensionInfoProperty, only a field type remainPropertyMap is now a class, and is mainly rewamped.PropertyMap is now immutable, a copy must be made to modify itWriteImageView::setPropertiesReadImageView::properties(), it now returns a std::shared_ptr<const PropertyMap>ImageViewFactory::stack change to take an ImageDimension instead of a DimensioninterpretationImageViewFactory::extractChannel variant that used an ImageChannelRegion::slice methodRegionX::slice methodCIE_XYZ_CHROMACITY renamed to CIE_XYZ_CHROMATICITYRGB_CHROMACITY renamed to RGB_CHROMATICITYYUV is now different from YCCHSB removed as it is an alias of HSVCMYK addedvoid Logger::setLevel(LogLevel level)void Logger::setFlushLevel(LogLevel level)void Logger::init(LogeLevel level)LogLevel Logger::logLevel()ImageView::shape now returns a const VectorXu64&ReadImageView::read and WriteImageView::write take a const VectorXu64& as indexImageViewFactory::fromStorage take a const VectorXu64& as shapeRegionX::origin and RegionX::size now returns const VectorXu64&MultiImageViewFactory::createMultiImageView that takes an initializer listImageViewFactory::interlace method to interlace MultiImageView instances into ImageView instancesCalibrationPropertyDimensionInfoProperty