Show / Hide Table of Contents

# Handling Measurement Data

Measurements from Nix devices are provided as objects conforming to the `IMeasurementData` interface. These contain all data and metadata to completely describe the measurement. Color, spectral, and density data are obtained from the `IMeasurementData` object as `IColorData`, `ISpectralData`, and `IDensityData` respectively. The differences between these object types are listed below.

## `IMeasurementData`

- Corresponds to a single measurement in a single `ScanMode` from a Nix device
- Provides color data as `IColorData`
  - To get color data use `ToColorData()`
  - All devices provide data for D50/2° reference white
  - Some devices provide additional color data for other reference white values
  - To check if available, use `ProvidesColor()`
- May provide spectral data as `ISpectralData`, depending on the device type and license capabilities
  - To check if available: check the property `ProvidesSpectral`
  - To get spectral data, use `SpectralData`
- May provide density data as `IDensityData`, depending on the device type and license capabilities
  - To check if available: check the property `ProvidesDensity`
  - To get density data, use `ToDensityData()`
- The measurement data contains all data and metadata to completely describe the measurement
  - For maximum fidelity and ease of use when saving data, save the `Raw` string data
  - The raw string value can be used to reconstruct measurement data using `FromRaw()`

### Supported `IColorData` output based on device type

Reference | Mini | Mini 2 | Mini 3 | Pro | Pro 2 | QC | Spectro 2 | Spectro L
--- | --- | --- | --- | --- | --- | --- | --- | ---
A/2° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
A/10° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
C/2° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
C/10° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
D50/2° | ☑ | ☑ | ☑ | ☑ | ☑ | ☑ | ☑ | ☑
D50/10° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
D55/2° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
D55/10° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
D65/2° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
D65/10° | ☐ | ☑ | ☑ | ☐ | ☑ | ☑ | ☑ | ☑
D75/2° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
D75/10° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
F2/2° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
F2/10° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
F7/2° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
F7/10° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
F11/2° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑
F11/10° | ☐ | ☐ | ☑ | ☐ | ☐ | ☐ | ☑ | ☑

### Supported `ISpectralData` and `IDensityData` output based on device type

Device Type | Supports spectral output | Supports density output
--- | --- | ---
Mini | ☐ | ☐
Mini 2 | ☐ | ☐
Mini 3 | ☐ | ☐
Pro | ☐ | ☐
Pro 2 | ☐ | ☐
QC | ☐ | ☐
Spectro 2 | ☑ | ☑
Spectro L | ☑ | ☑

##### Important

The table above indicates whether or not the hardware device is capable of providing these data types. However, these values will only be available if enabled by the active license. See Other license properties for more details.

##### Tip

The `IMeasurementData` flags `ProvidesSpectral` and `ProvidesDensity` take into account both the device and license capabilities and can be used to determine if these data are currently available.

## `IColorData`

- Consists of colorimetry data for a single reference white point (e.g. - D50/2°) and single measurement mode
- Can be obtained directly from an `IMeasurementData` object, or an `ISpectralData` object
- Full description of a color consisting of:
  - Type / color system: `Type`
    - One of CIEXYZ, CIELAB, CIELCH, CIELUV
  - Value: `Value`
    - Numeric array (three channels)
    - Format matches the system defined by `Type`
  - Reference white point: `Reference`
    - One of `ReferenceWhite`
  - Scan mode: `Mode`
    - One of `ScanMode`
- Regardless of `Type`, the color is always backed internally by a CIEXYZ value
- Color can be converted between any of the types specified in the `ColorType` enum using `ConvertTo()`
- Delta E to another `IColorData` can be evaluated using `CompareTo()`
  - Both `IColorData` objects must share the same reference, otherwise the result with be `NaN`
  - If the color difference type is not specified, the default is CIE2000
- sRGB value can be fetched from `RgbValue`

## `ISpectralData`

- Consists of spectral data for a single measurement mode
- Obtained from an `IMeasurementData` object that supports spectral data
- Full description of the spectral measurement consisting of:
  - Scan mode: `Mode`
  - Wavelength values: `Lambda` (numeric array)
  - Spectral values: `Value` (numeric array)
- Can be used to obtain density data as an `IDensityData` object, if enabled by the current license
  - Use `ToDensityData()`
- Can be used to obtain colorimetry data as an `IColorData` object for any reference white
  - Use `ToColorData()`
- sRGB value can be fetched for any reference white
  - Use `ToRgbValue()`

## `IDensityData`

- Consists of density data for a single measurement mode and single 'ISO status' / lookup table
- Obtained from an `IMeasurementData` object that supports spectral data, or an `ISpectralData` object
- Description of the density values for a specific 'ISO Status' consisting of:
  - Scan mode: `Mode`
  - ISO status: `Status`
  - Density values: `Value`
    - Index 0: C
    - Index 1: M
    - Index 2: Y
    - Index 3: K
  - Automatic density index `AutoIndex`

##### Tip

The `ColorUtils` class also provides many helpful functions for manual colour conversions and delta E calculations.

## Next steps

- Review the example applications
- Get additional support