Table of Contents

Struct XyzColor

Namespace
Egami.Colors
Assembly
Egami.dll

A CIE 1931 XYZ color relative to D65 white (Y = 1 for white), CSS Color 4's XYZ; ToD50() adapts it.

public readonly record struct XyzColor : IColorValue<XyzColor>, IEquatable<XyzColor>
Implements
Inherited Members

Examples

// Color values in the models apps ask for, from and to pixels, and between each other.
Rgba8 orange = new(240, 128, 32, 255);
HslColor hsl = HslColor.From(orange);                          // hue 28°, saturation 0.87, lightness 0.53
LabColor lab = ColorConvert.Convert<HslColor, LabColor>(hsl);  // through XYZ
OklchColor oklch = OklchColor.From(orange);
YCbCrColor jpeg = YCbCrColor.From(orange);                     // BT.601 full range, as JPEG
YCbCrColor video = YCbCrColor.From(orange, YuvMatrix.Bt709, YuvRange.Limited);

// Color difference: CIEDE2000 on Lab, distance on Oklab.
double deltaE = lab.DeltaE2000(LabColor.From(new Rgba8(235, 130, 40, 255)));

// Whole rows at once, from any pixel type and encoding.
Rgba8[] pixels = [orange, new(10, 20, 30, 255)];
OklabColor[] row = new OklabColor[pixels.Length];
ColorConvert.FromPixels<Rgba8, OklabColor>(pixels, row);
ColorConvert.FromPixels<Rgba8, OklabColor>(pixels, row, ColorProfile.DisplayP3);   // the same pixels read as Display P3

Constructors

XyzColor(float, float, float)

A CIE 1931 XYZ color relative to D65 white (Y = 1 for white), CSS Color 4's XYZ; ToD50() adapts it.

public XyzColor(float X, float Y, float Z)

Parameters

X float

The X component.

Y float

The Y component: relative luminance.

Z float

The Z component.

Examples

// Color values in the models apps ask for, from and to pixels, and between each other.
Rgba8 orange = new(240, 128, 32, 255);
HslColor hsl = HslColor.From(orange);                          // hue 28°, saturation 0.87, lightness 0.53
LabColor lab = ColorConvert.Convert<HslColor, LabColor>(hsl);  // through XYZ
OklchColor oklch = OklchColor.From(orange);
YCbCrColor jpeg = YCbCrColor.From(orange);                     // BT.601 full range, as JPEG
YCbCrColor video = YCbCrColor.From(orange, YuvMatrix.Bt709, YuvRange.Limited);

// Color difference: CIEDE2000 on Lab, distance on Oklab.
double deltaE = lab.DeltaE2000(LabColor.From(new Rgba8(235, 130, 40, 255)));

// Whole rows at once, from any pixel type and encoding.
Rgba8[] pixels = [orange, new(10, 20, 30, 255)];
OklabColor[] row = new OklabColor[pixels.Length];
ColorConvert.FromPixels<Rgba8, OklabColor>(pixels, row);
ColorConvert.FromPixels<Rgba8, OklabColor>(pixels, row, ColorProfile.DisplayP3);   // the same pixels read as Display P3

Properties

X

The X component.

public float X { get; init; }

Property Value

float

Y

The Y component: relative luminance.

public float Y { get; init; }

Property Value

float

Z

The Z component.

public float Z { get; init; }

Property Value

float

Methods

From(Rgba8)

Returns the value of an sRGB pixel; alpha is ignored.

public static XyzColor From(Rgba8 color)

Parameters

color Rgba8

The pixel.

Returns

XyzColor

The value.

From(RgbaF32)

Returns the value of an sRGB pixel, whose channels may be outside 0..1; alpha is ignored.

public static XyzColor From(RgbaF32 color)

Parameters

color RgbaF32

The pixel.

Returns

XyzColor

The value.

FromD50(XyzColor)

Returns the color adapted from D50 to D65 with Bradford, as ICC and CSS Color 4 adapt.

public static XyzColor FromD50(XyzColor d50)

Parameters

d50 XyzColor

XYZ relative to D50 white.

Returns

XyzColor

The color relative to D65.

FromXyz(XyzColor)

Returns the value for an XYZ color (D65, white Y = 1).

public static XyzColor FromXyz(XyzColor xyz)

Parameters

xyz XyzColor

The color.

Returns

XyzColor

The value; components may fall outside their usual range for colors outside sRGB.

IsCloseTo(XyzColor, float)

Returns whether every component of the two values differs by at most tolerance.

public bool IsCloseTo(XyzColor other, float tolerance = 0.0001)

Parameters

other XyzColor

The other value.

tolerance float

The largest difference allowed in a component.

Returns

bool

true if they are that close.

ToD50()

Returns the color adapted from D65 to D50 with Bradford, as ICC and CSS Color 4 adapt.

public XyzColor ToD50()

Returns

XyzColor

XYZ relative to D50 white.

ToRgba8()

Returns the color as an opaque sRGB pixel, each channel clamped into range.

public Rgba8 ToRgba8()

Returns

Rgba8

The pixel.

ToRgbaF32()

Returns the color as an opaque sRGB pixel, unclamped, so colors outside sRGB keep channels outside 0..1.

public RgbaF32 ToRgbaF32()

Returns

RgbaF32

The pixel.

ToXyz()

Returns the color as XYZ (D65, white Y = 1).

public XyzColor ToXyz()

Returns

XyzColor

The color.