Struct LabColor
A CIE Lab* color relative to D50, as ICC and CSS Color 4 define Lab.
public readonly record struct LabColor : IColorValue<LabColor>, IEquatable<LabColor>
- 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
LabColor(float, float, float)
A CIE Lab* color relative to D50, as ICC and CSS Color 4 define Lab.
public LabColor(float L, float A, float B)
Parameters
LfloatLightness, 0 for black to 100 for white.
AfloatGreen (negative) to red (positive), about −128 to 127 for real colors.
BfloatBlue (negative) to yellow (positive), about −128 to 127 for real colors.
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
A
Green (negative) to red (positive), about −128 to 127 for real colors.
public float A { get; init; }
Property Value
B
Blue (negative) to yellow (positive), about −128 to 127 for real colors.
public float B { get; init; }
Property Value
L
Lightness, 0 for black to 100 for white.
public float L { get; init; }
Property Value
Methods
DeltaE2000(LabColor)
Returns the CIEDE2000 color difference (CIE 142-2001), the industry's measure of how different two colors look: under 1 is barely visible, 2 is noticeable side by side.
public double DeltaE2000(LabColor other)
Parameters
otherLabColorThe other color.
Returns
- double
ΔE₀₀, 0 or more.
From(Rgba8)
Returns the value of an sRGB pixel; alpha is ignored.
public static LabColor From(Rgba8 color)
Parameters
colorRgba8The pixel.
Returns
- LabColor
The value.
From(RgbaF32)
Returns the value of an sRGB pixel, whose channels may be outside 0..1; alpha is ignored.
public static LabColor From(RgbaF32 color)
Parameters
colorRgbaF32The pixel.
Returns
- LabColor
The value.
FromXyz(XyzColor)
Returns the value for an XYZ color (D65, white Y = 1).
public static LabColor FromXyz(XyzColor xyz)
Parameters
xyzXyzColorThe color.
Returns
- LabColor
The value; components may fall outside their usual range for colors outside sRGB.
IsCloseTo(LabColor, float)
Returns whether every component of the two values differs by at most tolerance.
public bool IsCloseTo(LabColor other, float tolerance = 0.0001)
Parameters
Returns
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.