loci.formats

## Class ChannelSeparator

- java.lang.Object
- - loci.formats.ReaderWrapper
  - - loci.formats.ChannelSeparator

- All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, ICompressedTileReader, IFormatHandler, IFormatReader, IMetadataConfigurable, IPyramidHandler

      public class ChannelSeparator
      extends ReaderWrapper

  Logic to automatically separate the channels in a file.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private byte[]` | `lastImage` Last image opened.
    `private int` | `lastImageHeight` Height of last image opened.
    `private int` | `lastImageIndex` Index of last image opened.
    `private int` | `lastImageSeries` Series of last image opened.
    `private int` | `lastImageWidth` Width of last image opened.
    `private int` | `lastImageX` X index of last image opened.
    `private int` | `lastImageY` Y index of last image opened.

    - ### Fields inherited from class loci.formats.ReaderWrapper

      `reader`

    - ### Fields inherited from interface loci.formats.IFormatReader

      `CAN_GROUP, CANNOT_GROUP, MUST_GROUP`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ChannelSeparator()` Constructs a ChannelSeparator around a new image reader.
    `ChannelSeparator(IFormatReader r)` Constructs a ChannelSeparator with the given reader.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close(boolean fileOnly)` Closes the currently open file.
    `java.lang.String` | `getDimensionOrder()` Gets a five-character string representing the dimension order in which planes will be returned.
    `int` | `getImageCount()` Determines the number of image planes in the current file.
    `int` | `getIndex(int z, int c, int t)` Gets the rasterized index corresponding to the given Z, C and T coordinates (real sizes).
    `int` | `getIndex(int z, int c, int t, int moduloZ, int moduloC, int moduloT)` Gets the rasterized index corresponding to the given Z, C, T, moduloZ, moduloC and moduloT coordinates (effective sizes).
    `java.lang.Class<?>` | `getNativeDataType()` Returns the native data type of image planes for this reader, as returned by `IFormatReader.openPlane(int, int, int, int, int)` or `IFormatWriter.savePlane(int, java.lang.Object)`.
    `int` | `getOriginalIndex(int no)` Returns the image number in the original dataset that corresponds to the given image number.
    `Codec` | `getTileCodec(int no)` Retrieve a codec that can be used to decompress compressed tiles.
    `CodecOptions` | `getTileCodecOptions(int no, int x, int y)` Retrieve codec options that can be used to decompressed the specified tile.
    `int[]` | `getZCTCoords(int index)` Gets the Z, C and T coordinates (real sizes) corresponding to the given rasterized index value.
    `int[]` | `getZCTModuloCoords(int index)` Gets the Z, C, T, moduloZ, moduloC and moduloT coordinates (effective sizes) corresponding to the given rasterized index value.
    `boolean` | `isRGB()` Checks if the image planes in the file have more than one channel per `IFormatReader.openBytes(int)` call.
    `static ChannelSeparator` | `makeChannelSeparator(IFormatReader r)` Converts the given reader into a ChannelSeparator, wrapping if needed.
    `byte[]` | `openBytes(int no)` Obtains the specified image plane from the current file as a byte array.
    `byte[]` | `openBytes(int no, byte[] buf)` Obtains the specified image plane from the current file into a pre-allocated byte array of (sizeX * sizeY * bytesPerPixel * RGB channel count).
    `byte[]` | `openBytes(int no, byte[] buf, int x, int y, int w, int h)` Obtains a sub-image of the specified image plane into a pre-allocated byte array.
    `byte[]` | `openBytes(int no, int x, int y, int w, int h)` Obtains a sub-image of the specified image plane, whose upper-left corner is given by (x, y).
    `byte[]` | `openCompressedBytes(int no, byte[] buf, int x, int y)` Retrieve the specified tile without performing any decompression.
    `byte[]` | `openCompressedBytes(int no, int x, int y)` Retrieve the specified tile without performing any decompression.
    `byte[]` | `openThumbBytes(int no)` Obtains a thumbnail for the specified image plane from the current file, as a byte array.
    `void` | `setId(java.lang.String id)` Sets the current file name.

    - ### Methods inherited from class loci.formats.ReaderWrapper

      `close, coreIndexToSeries, duplicate, fileGroupOption, get16BitLookupTable, get8BitLookupTable, getAdvancedSeriesUsedFiles, getAdvancedUsedFiles, getBitsPerPixel, getCoreIndex, getCoreMetadataList, getCurrentFile, getDatasetStructureDescription, getDomains, getEffectiveSizeC, getFillColor, getFormat, getGlobalMetadata, getMetadataOptions, getMetadataStore, getMetadataStoreRoot, getMetadataValue, getModuloC, getModuloT, getModuloZ, getOptimalTileHeight, getOptimalTileWidth, getPixelType, getPossibleDomains, getReader, getRequiredDirectories, getResolution, getResolutionCount, getRGBChannelCount, getSeries, getSeriesCount, getSeriesMetadata, getSeriesMetadataValue, getSeriesUsedFiles, getSeriesUsedFiles, getSizeC, getSizeT, getSizeX, getSizeY, getSizeZ, getSuffixes, getSupportedMetadataLevels, getThumbSizeX, getThumbSizeY, getTileColumns, getTileRows, getUnderlyingReaders, getUsedFiles, getUsedFiles, hasCompanionFiles, hasFlattenedResolutions, isFalseColor, isGroupFiles, isIndexed, isInterleaved, isInterleaved, isLittleEndian, isMetadataComplete, isMetadataFiltered, isNormalized, isOrderCertain, isOriginalMetadataPopulated, isSingleFile, isThisType, isThisType, isThisType, isThisType, isThumbnailSeries, openPlane, reopenFile, seriesToCoreIndex, setCoreIndex, setFillColor, setFlattenedResolutions, setGroupFiles, setMetadataFiltered, setMetadataOptions, setMetadataStore, setNormalized, setOriginalMetadataPopulated, setResolution, setSeries, unwrap, unwrap, unwrap`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### lastImage

          private byte[] lastImage

      Last image opened.

    - #### lastImageIndex

          private int lastImageIndex

      Index of last image opened.

    - #### lastImageSeries

          private int lastImageSeries

      Series of last image opened.

    - #### lastImageX

          private int lastImageX

      X index of last image opened.

    - #### lastImageY

          private int lastImageY

      Y index of last image opened.

    - #### lastImageWidth

          private int lastImageWidth

      Width of last image opened.

    - #### lastImageHeight

          private int lastImageHeight

      Height of last image opened.

  - ### Constructor Detail

    - #### ChannelSeparator

          public ChannelSeparator()

      Constructs a ChannelSeparator around a new image reader.

    - #### ChannelSeparator

          public ChannelSeparator(IFormatReader r)

      Constructs a ChannelSeparator with the given reader.

  - ### Method Detail

    - #### makeChannelSeparator

          public static ChannelSeparator makeChannelSeparator(IFormatReader r)

      Converts the given reader into a ChannelSeparator, wrapping if needed.

    - #### getOriginalIndex

          public int getOriginalIndex(int no)

      Returns the image number in the original dataset that corresponds to the given image number. For instance, if the original dataset was a single RGB image and the given image number is 2, the return value will be 0.
      Parameters:
        `no` - is an image number greater than or equal to 0 and less than getImageCount()
      Returns:
        the corresponding image number in the original (unseparated) data.

    - #### getImageCount

          public int getImageCount()

      Description copied from interface: `IFormatReader`
      Determines the number of image planes in the current file.
      Specified by:
        `getImageCount` in interface `IFormatReader`
      Overrides:
        `getImageCount` in class `ReaderWrapper`

    - #### getDimensionOrder

          public java.lang.String getDimensionOrder()

      Description copied from interface: `IFormatReader`
      Gets a five-character string representing the dimension order in which planes will be returned. Valid orders are:
      - XYCTZ
      - XYCZT
      - XYTCZ
      - XYTZC
      - XYZCT
      - XYZTC
      In cases where the channels are interleaved (e.g., CXYTZ), C will be the first dimension after X and Y (e.g., XYCTZ) and the `IFormatReader.isInterleaved()` method will return true.
      Specified by:
        `getDimensionOrder` in interface `IFormatReader`
      Overrides:
        `getDimensionOrder` in class `ReaderWrapper`

    - #### isRGB

          public boolean isRGB()

      Description copied from interface: `IFormatReader`
      Checks if the image planes in the file have more than one channel per `IFormatReader.openBytes(int)` call. This method returns true if and only if `IFormatReader.getRGBChannelCount()` returns a value greater than 1.
      Specified by:
        `isRGB` in interface `IFormatReader`
      Overrides:
        `isRGB` in class `ReaderWrapper`

    - #### openBytes

          public byte[] openBytes(int no)
                           throws FormatException,
                                  java.io.IOException

      Description copied from interface: `IFormatReader`
      Obtains the specified image plane from the current file as a byte array.
      Specified by:
        `openBytes` in interface `IFormatReader`
      Overrides:
        `openBytes` in class `ReaderWrapper`
      Throws:
        `FormatException`
        `java.io.IOException`
      See Also:
        `IFormatReader.openBytes(int, byte[])`

    - #### openBytes

          public byte[] openBytes(int no,
                                  byte[] buf)
                           throws FormatException,
                                  java.io.IOException

      Description copied from interface: `IFormatReader`
      Obtains the specified image plane from the current file into a pre-allocated byte array of (sizeX * sizeY * bytesPerPixel * RGB channel count).
      Specified by:
        `openBytes` in interface `IFormatReader`
      Overrides:
        `openBytes` in class `ReaderWrapper`
      Parameters:
        `no` - the plane index within the current series.
        `buf` - a pre-allocated buffer.
      Returns:
        the pre-allocated buffer `buf` for convenience.
      Throws:
        `FormatException` - if there was a problem parsing the metadata of the file.
        `java.io.IOException` - if there was a problem reading the file.

    - #### openBytes

          public byte[] openBytes(int no,
                                  int x,
                                  int y,
                                  int w,
                                  int h)
                           throws FormatException,
                                  java.io.IOException

      Description copied from interface: `IFormatReader`
      Obtains a sub-image of the specified image plane, whose upper-left corner is given by (x, y).
      Specified by:
        `openBytes` in interface `IFormatReader`
      Overrides:
        `openBytes` in class `ReaderWrapper`
      Throws:
        `FormatException`
        `java.io.IOException`

    - #### openBytes

          public byte[] openBytes(int no,
                                  byte[] buf,
                                  int x,
                                  int y,
                                  int w,
                                  int h)
                           throws FormatException,
                                  java.io.IOException

      Description copied from interface: `IFormatReader`
      Obtains a sub-image of the specified image plane into a pre-allocated byte array.
      Specified by:
        `openBytes` in interface `IFormatReader`
      Overrides:
        `openBytes` in class `ReaderWrapper`
      Parameters:
        `no` - the plane index within the current series.
        `buf` - a pre-allocated buffer.
        `x` - X coordinate of the upper-left corner of the sub-image
        `y` - Y coordinate of the upper-left corner of the sub-image
        `w` - width of the sub-image
        `h` - height of the sub-image
      Returns:
        the pre-allocated buffer `buf` for convenience.
      Throws:
        `FormatException` - if there was a problem parsing the metadata of the file.
        `java.io.IOException` - if there was a problem reading the file.

    - #### openThumbBytes

          public byte[] openThumbBytes(int no)
                                throws FormatException,
                                       java.io.IOException

      Description copied from interface: `IFormatReader`
      Obtains a thumbnail for the specified image plane from the current file, as a byte array.
      Specified by:
        `openThumbBytes` in interface `IFormatReader`
      Overrides:
        `openThumbBytes` in class `ReaderWrapper`
      Throws:
        `FormatException`
        `java.io.IOException`

    - #### close

          public void close(boolean fileOnly)
                     throws java.io.IOException

      Description copied from interface: `IFormatReader`
      Closes the currently open file. If the flag is set, this is all that happens; if unset, it is equivalent to calling `Closeable.close()`.
      Specified by:
        `close` in interface `IFormatReader`
      Overrides:
        `close` in class `ReaderWrapper`
      Throws:
        `java.io.IOException`

    - #### getIndex

          public int getIndex(int z,
                              int c,
                              int t)

      Description copied from interface: `IFormatReader`
      Gets the rasterized index corresponding to the given Z, C and T coordinates (real sizes).
      Specified by:
        `getIndex` in interface `IFormatReader`
      Overrides:
        `getIndex` in class `ReaderWrapper`

    - #### getIndex

          public int getIndex(int z,
                              int c,
                              int t,
                              int moduloZ,
                              int moduloC,
                              int moduloT)

      Description copied from interface: `IFormatReader`
      Gets the rasterized index corresponding to the given Z, C, T, moduloZ, moduloC and moduloT coordinates (effective sizes). Note that the Z, C and T coordinates take the modulo dimension sizes into account. The effective size for each of these dimensions is limited to the total size of the dimension divided by the modulo size.
      Specified by:
        `getIndex` in interface `IFormatReader`
      Overrides:
        `getIndex` in class `ReaderWrapper`

    - #### getZCTCoords

          public int[] getZCTCoords(int index)

      Description copied from interface: `IFormatReader`
      Gets the Z, C and T coordinates (real sizes) corresponding to the given rasterized index value.
      Specified by:
        `getZCTCoords` in interface `IFormatReader`
      Overrides:
        `getZCTCoords` in class `ReaderWrapper`

    - #### getZCTModuloCoords

          public int[] getZCTModuloCoords(int index)

      Description copied from interface: `IFormatReader`
      Gets the Z, C, T, moduloZ, moduloC and moduloT coordinates (effective sizes) corresponding to the given rasterized index value. Note that the Z, C and T coordinates are not the same as those returned by getZCTCoords(int) because the size of the modulo dimensions is taken into account. The effective size for each of these dimensions is limited to the total size of the dimension divided by the modulo size.
      Specified by:
        `getZCTModuloCoords` in interface `IFormatReader`
      Overrides:
        `getZCTModuloCoords` in class `ReaderWrapper`

    - #### openCompressedBytes

          public byte[] openCompressedBytes(int no,
                                            int x,
                                            int y)
                                     throws FormatException,
                                            java.io.IOException

      Description copied from interface: `ICompressedTileReader`
      Retrieve the specified tile without performing any decompression.
      Specified by:
        `openCompressedBytes` in interface `ICompressedTileReader`
      Overrides:
        `openCompressedBytes` in class `ReaderWrapper`
      Parameters:
        `no` - plane index
        `x` - tile X index (indexed from 0, @see getTileColumns(int))
        `y` - tile Y index (indexed from 0, @see getTileRows(int))
      Returns:
        compressed tile bytes
      Throws:
        `FormatException`
        `java.io.IOException`

    - #### openCompressedBytes

          public byte[] openCompressedBytes(int no,
                                            byte[] buf,
                                            int x,
                                            int y)
                                     throws FormatException,
                                            java.io.IOException

      Description copied from interface: `ICompressedTileReader`
      Retrieve the specified tile without performing any decompression.
      Specified by:
        `openCompressedBytes` in interface `ICompressedTileReader`
      Overrides:
        `openCompressedBytes` in class `ReaderWrapper`
      Parameters:
        `no` - plane index
        `buf` - pre-allocated buffer in which to store compressed bytes
        `x` - tile X index (indexed from 0, @see getTileColumns(int))
        `y` - tile Y index (indexed from 0, @see getTileRows(int))
      Returns:
        compressed tile bytes
      Throws:
        `FormatException`
        `java.io.IOException`

    - #### getTileCodec

          public Codec getTileCodec(int no)
                             throws FormatException,
                                    java.io.IOException

      Description copied from interface: `ICompressedTileReader`
      Retrieve a codec that can be used to decompress compressed tiles.
      Specified by:
        `getTileCodec` in interface `ICompressedTileReader`
      Overrides:
        `getTileCodec` in class `ReaderWrapper`
      Parameters:
        `no` - plane index
      Returns:
        codec that can be used for compressed tiles in the specified plane
      Throws:
        `FormatException`
        `java.io.IOException`
      See Also:
        `ICompressedTileReader.openCompressedBytes(int, int, int)`

    - #### getTileCodecOptions

          public CodecOptions getTileCodecOptions(int no,
                                                  int x,
                                                  int y)
                                           throws FormatException,
                                                  java.io.IOException

      Description copied from interface: `ICompressedTileReader`
      Retrieve codec options that can be used to decompressed the specified tile.
      Specified by:
        `getTileCodecOptions` in interface `ICompressedTileReader`
      Overrides:
        `getTileCodecOptions` in class `ReaderWrapper`
      Parameters:
        `no` - plane index
        `x` - tile X index (indexed from 0, @see getTileColumns(int))
        `y` - tile Y index (indexed from 0, @see getTileRows(int))
      Returns:
        codec options
      Throws:
        `FormatException`
        `java.io.IOException`
      See Also:
        `ICompressedTileReader.getTileCodec(int)`

    - #### getNativeDataType

          public java.lang.Class<?> getNativeDataType()

      Description copied from interface: `IFormatHandler`
      Returns the native data type of image planes for this reader, as returned by `IFormatReader.openPlane(int, int, int, int, int)` or `IFormatWriter.savePlane(int, java.lang.Object)`. For most readers this type will be a byte array; however, some readers call external APIs that work with other types such as `BufferedImage`.
      Specified by:
        `getNativeDataType` in interface `IFormatHandler`
      Overrides:
        `getNativeDataType` in class `ReaderWrapper`

    - #### setId

          public void setId(java.lang.String id)
                     throws FormatException,
                            java.io.IOException

      Description copied from interface: `IFormatHandler`
      Sets the current file name.
      Specified by:
        `setId` in interface `IFormatHandler`
      Overrides:
        `setId` in class `ReaderWrapper`
      Throws:
        `FormatException`
        `java.io.IOException`

Copyright © 2026 Open Microscopy Environment