Documentation
¶
Index ¶
- Constants
- Variables
- func Delinearized(component float64) uint8
- func Delinearized3(x, y, z float64) (uint8, uint8, uint8)
- func IsBlue(hue float64) bool
- func IsCyan(hue float64) bool
- func IsYellow(hue float64) bool
- func LabFunc(t float64) float64
- func LabInvFunc(ft float64) float64
- func Linearized(component uint8) float64
- func Linearized3(x, y, z uint8) (float64, float64, float64)
- func LstarFromY(y float64) float64
- func YFromLstar(lstar float64) float64
- type ARGB
- func ARGBFromHex(hex string) (ARGB, error)
- func ARGBFromHexMust(hex string) ARGB
- func ARGBFromInterface(c color.Color) ARGB
- func ARGBFromLinRGB(r, g, b float64) ARGB
- func ARGBFromLstar(lstar float64) ARGB
- func ARGBFromRGB(r, g, b uint8) ARGB
- func ARGBFromXYZ(x, y, z float64) ARGB
- func NewARGB(a, r, g, b uint8) ARGB
- func (c ARGB) Alpha() uint8
- func (c ARGB) AnsiBg(text string) string
- func (c ARGB) AnsiFg(text string) string
- func (c ARGB) Blue() uint8
- func (c ARGB) Green() uint8
- func (c ARGB) HexARGB() string
- func (c ARGB) HexRGB() string
- func (c ARGB) HexRGBA() string
- func (c ARGB) LStar() float64
- func (c ARGB) MarshalText() ([]byte, error)
- func (c ARGB) RGBA() (red uint32, green uint32, blue uint32, alpha uint32)
- func (c ARGB) Red() uint8
- func (c ARGB) String() string
- func (c ARGB) ToARGB() ARGB
- func (c ARGB) ToCam() *Cam16
- func (c ARGB) ToHct() Hct
- func (c ARGB) ToLab() Lab
- func (c ARGB) ToXYZ() XYZ
- func (c *ARGB) UnmarshalText(data []byte) error
- func (c ARGB) Values() (alpha uint8, red uint8, green uint8, blue uint8)
- type Cam16
- func Cam16FromJch(j, c, h float64) *Cam16
- func Cam16FromJchInEnv(j, c, h float64, env *Environmnet) *Cam16
- func Cam16FromUcs(jstar, astar, bstar float64) *Cam16
- func Cam16FromUcsInEnv(jstar, astar, bstar float64, env *Environmnet) *Cam16
- func Cam16FromXyzInEnv(xyz XYZ, env *Environmnet) *Cam16
- func NewCam16(hue, chroma, j, q, m, s, jstar, astar, bstar float64) *Cam16
- type Environmnet
- type Hct
- func (h Hct) Hash() [3]int64
- func (h Hct) InViewingConditions(env *Environmnet) Hct
- func (h Hct) IsBlue() bool
- func (h Hct) IsCyan() bool
- func (h Hct) IsYellow() bool
- func (h Hct) RGBA() (red uint32, green uint32, blue uint32, alpha uint32)
- func (h Hct) String() string
- func (h Hct) ToARGB() ARGB
- func (h Hct) ToCam() *Cam16
- func (h Hct) ToHct() Hct
- func (h Hct) ToLab() Lab
- func (h Hct) ToXYZ() XYZ
- type Lab
- func (c Lab) DistanceSquared(b Lab) float64
- func (c Lab) LStar() float64
- func (c Lab) LuminanceY() float64
- func (c Lab) RGBA() (red uint32, green uint32, blue uint32, alpha uint32)
- func (c Lab) ToARGB() ARGB
- func (c Lab) ToCam() *Cam16
- func (c Lab) ToHct() Hct
- func (c Lab) ToXYZ() XYZ
- func (c Lab) Values() (float64, float64, float64)
- type OkLab
- type XYZ
- func (c XYZ) LStar() float64
- func (c XYZ) Luminance() float64
- func (c XYZ) RGBA() (red uint32, green uint32, blue uint32, alpha uint32)
- func (c XYZ) ToARGB() ARGB
- func (c XYZ) ToCam() *Cam16
- func (c XYZ) ToHct() Hct
- func (c XYZ) ToLab() Lab
- func (c XYZ) ToOkLab() OkLab
- func (c XYZ) Values() (float64, float64, float64)
Constants ¶
const Brightest = uint8(0xFF) // 255
Brightest is the maximum value of an 8-bit color channel (255)
const LabFuncE float64 = 216.0 / 24389.0
LabFuncE is the threshold for linear vs. nonlinear transition. Reference
const LabFuncK float64 = 24389.0 / 27.0
LabFuncK s the constant used for linear approximation. Reference
Variables ¶
var ( // SrgbToXyz is the Matrix3 that is used for converting SRGB colors to XYZ SrgbToXyz = num.NewMatrix3( 0.41233895, 0.35762064, 0.18051042, 0.2126, 0.7152, 0.0722, 0.01932141, 0.11916382, 0.95034478, ) // XyzToSrgb is the Matrix3 that is used for converting XYZ colors to SRGB XyzToSrgb = num.NewMatrix3( 3.2413774792388685, -1.5376652402851851, -0.49885366846268053, -0.9691452513005321, 1.8758853451067872, 0.04156585616912061, 0.05562093689691305, -0.20395524564742123, 1.0571799111220335, ) // WhitePointD65 is the white most point of XYZ to sRGB color space WhitePointD65 = num.NewVector3(95.047, 100.0, 108.883) // CriticalPlanes is used for converting Hct to ARGB CriticalPlanes = []float64{}/* 255 elements not displayed */ )
var Cat16InvMatrix = num.NewMatrix3(
1.86206786, -1.01125463, 0.14918678,
0.38752654, 0.62144744, -0.00897399,
-0.0158415, -0.03412294, 1.04996444,
)
Cat16InvMatrix is the inverse of Cat16Matrix.
It converts CAM16 LMS cone responses back into linear RGB values, reversing the chromatic adaptation process. This matrix is used when converting from the CAM16/HCT perceptual space back to RGB.
var Cat16Matrix = num.NewMatrix3(
0.401288, 0.650173, -0.051461,
-0.250268, 1.204414, 0.045854,
-0.002079, 0.048952, 0.953127,
)
Cat16Matrix is the forward CAT16 (Chromatic Adaptation Transform) matrix.
It converts linear RGB values into the CAM16 LMS (Long, Medium, Short) cone response domain. This step models how the human visual system adapts to different white points and viewing conditions.
The CAT16 matrix is part of the CAM16 color appearance model used by the HCT color system.
var DefaultEnviroment = NewEnvironment( (200/math.Pi)*YFromLstar(50)/100, 50, 2, false, )
DefaultEnviroment returns the default sRGB-like viewing conditions.
var LinrgbFromScaledDiscount = num.NewMatrix3(
1373.2198709594231, -1100.4251190754821, -7.278681089101213,
-271.815969077903, 559.6580465940733, -32.46047482791194,
1.9622899599665666, -57.173814538844006, 308.7233197812385,
)
LinrgbFromScaledDiscount is the inverse of ScaledDiscountFromLinRGB.
It converts values from the scaled discount space back into linear RGB, reconstructing displayable color values from the perceptual model (used when converting HCT → RGB).
var OkLabMatrix1 = num.NewMatrix3(
0.8189330101, 0.3618667424, -0.1288597137,
0.0329845436, 0.9293118715, 0.0361456387,
0.0482003018, 0.2643662691, 0.6338517070,
)
OkLabMatrix1 defines the linear transformation from CIE XYZ to LMS cone responses used in the OkLab color model.
This corresponds to the matrix M1 in Ottosson’s paper:
[L, M, S]^T = M1 * [X, Y, Z]^T
var OkLabMatrix1Inv = num.NewMatrix3(
1.2270138511, -0.5577999807, 0.2812561490,
-0.0405801784, 1.1122568696, -0.0716766787,
-0.0763812845, -0.4214819784, 1.5861632204,
)
OkLabMatrix1Inv is the inverse of M1, used to convert from LMS back to XYZ.
var OkLabMatrix2 = num.NewMatrix3(
0.2104542553, 0.7936177850, -0.0040720468,
1.9779984951, -2.4285922050, 0.4505937099,
0.0259040371, 0.7827717662, -0.8086757660,
)
OkLabMatrix2 defines the transformation from nonlinearly transformed LMS (after cube-root compression) to OkLab coordinates (L, a, b).
This corresponds to matrix M2 in Ottosson’s formulation:
[L, a, b]^T = M2 * [L', M', S']^T
var OkLabMatrix2Inv = num.NewMatrix3(
0.9999999985, 0.3963377922, 0.2158037581,
1.0000000089, -0.1055613423, -0.0638541748,
1.0000000547, -0.0894841821, -1.2914855379,
)
OkLabMatrix2Inv is the inverse of M2, used to convert from OkLab (L,a,b) back to cube-rooted LMS values.
var ScaledDiscountFromLinRGB = num.NewMatrix3(
0.001200833568784504, 0.002389694492170889, 0.0002795742885861124,
0.0005891086651375999, 0.0029785502573438758, 0.0003270666104008398,
0.00010146692491640572, 0.0005364214359186694, 0.0032979401770712076,
)
ScaledDiscountFromLinRGB is a 3×3 transform matrix that converts from linear RGB to the "scaled discount" space used internally by the CAM16/HCT color appearance model.
This transformation accounts for human visual response under standard viewing conditions, mapping linear RGB signals into a perceptual domain where hue, chroma, and tone can be computed.
var YFromLinRGB = num.NewVector3(0.2126, 0.7152, 0.0722)
YFromLinRGB vector is used to get Y star of CieLab from linear RGB
Functions ¶
func Delinearized ¶
Delinearized takes component (float64) that represents linear R/G/B channel. Component should be 0.0 < component < 1.0. Returns uint8 (0 <= n <= 255) representation of color component.
func Delinearized3 ¶
Delinearized3 is like Delinearized but takes 3 input and returns 3 output.
func IsBlue ¶
IsBlue checks if given hue falls in blue range (250-270°).
Params:
- hue: Hue angle in degrees to check.
Returns bool - True if hue is in blue range.
func IsCyan ¶
IsCyan checks if given hue falls in cyan range (170-207°).
Params:
- hue: Hue angle in degrees to check.
Returns bool - True if hue is in cyan range.
func IsYellow ¶
IsYellow checks if given hue falls in yellow range (105-125°).
Params:
- hue: Hue angle in degrees to check.
Returns bool - True if hue is in yellow range.
func LabFunc ¶
LabFunc is part of the conversion from XYZ to Lab color space. It applies a nonlinear transformation that approximates human vision perception.
func LabInvFunc ¶
LabInvFunc is the inverse of LabFunc, used when converting from Lab to XYZ. It reverses the nonlinear transformation.
func Linearized ¶
Linearized takes component (uint8) that represents R/G/B channel. Returns 0.0 <= output <= 1.0, color channel converted to linear RGB space
func Linearized3 ¶
Linearized3 is like Linearized but takes 3 input and returns 3 output.
func LstarFromY ¶
LstarFromY converts Y (relative luminance) in the XYZ color space to L* (perceptual luminance) in the CIELAB color space.
Both Y and L* represent luminance, but Y is linear and L* is perceptually uniform.
y is the Y value in the XYZ color space. It returns the corresponding L* value in the CIELAB color space.
func YFromLstar ¶
YFromLstar converts an L* (perceptual luminance) value from the CIELAB color space to Y (relative luminance) in the XYZ color space.
Both L* and Y represent luminance, but L* is perceptually uniform and Y is linear.
lstar is the L* value in the CIELAB color space. It returns the corresponding Y value in the XYZ color space.
Types ¶
type ARGB ¶
type ARGB uint32
ARGB represents a 32-bit color in ARGB format (Alpha, Red, Green, Blue) packed into a uint32. It implements the color.Color interface.
func ARGBFromHex ¶
ARGBFromHex parses a hex color string and returns an ARGB color. hex is the hexadecimal color string to parse. Returns the parsed ARGB color and error if the RGB hex is invalid.
Supports formats: #RGB, #RGBA, #RRGGBB, #RRGGBBAA.
func ARGBFromHexMust ¶
ARGBFromHexMust parses a hex color string and returns an ARGB color. Panics if the string cannot be parsed. Supports formats: #RGB, #RGBA, #RRGGBB, #RRGGBBAA. hex: The hexadecimal color string to parse Returns the parsed ARGB color.
func ARGBFromInterface ¶
ARGBFromInterface converts any color.Color implementation to ARGB. It handles the 16-bit to 8-bit conversion automatically.
func ARGBFromLinRGB ¶
ARGBFromLinRGB creates an opaque ARGB color from linear RGB components. r, g, b: Linear RGB components (0.0-1.0) Returns the corresponding opaque ARGB color after delinearization.
func ARGBFromLstar ¶
ARGBFromLstar converts a CIE L* (lightness) value to an ARGB grayscale color. lstar: Lightness value in the L*a*b* color space (0-100) Returns an ARGB grayscale color matching the specified lightness.
func ARGBFromRGB ¶
ARGBFromRGB creates an opaque ARGB color (alpha=255) from 8-bit RGB components. r, g, b: Red, green, and blue components (0-255) Returns the corresponding opaque ARGB color.
func ARGBFromXYZ ¶
ARGBFromXYZ creates an ARGB color from XYZ color space coordinates. x, y, z: Coordinates in the CIE 1931 XYZ color space Returns the corresponding ARGB color.
func NewARGB ¶
NewARGB creates an ARGB color from individual 8-bit alpha, red, green, and blue components. The components are packed into a uint32 in ARGB order.
func (ARGB) AnsiBg ¶
AnsiBg wraps the given text with ANSI escape codes for this background color. text: The string to be colored Returns the string wrapped with ANSI background color codes.
func (ARGB) AnsiFg ¶
AnsiFg wraps the given text with ANSI escape codes for this foreground color. text: The string to be colored Returns the string wrapped with ANSI foreground color codes.
func (ARGB) HexARGB ¶
HexARGB returns the hexadecimal representation of the color in #AARRGGBB format.
func (ARGB) HexRGBA ¶
HexRGBA returns the hexadecimal representation of the color in #RRGGBBAA format.
func (ARGB) LStar ¶
LStar calculates the CIE L* (lightness) value of the color. Returns the L* value (0-100) representing the perceived lightness.
func (ARGB) MarshalText ¶
MarshalText implements the encoding.TextMarshaler interface. Returns the hexadecimal representation of the color (#RRGGBBAA format).
func (ARGB) RGBA ¶
RGBA implements the color.Color interface. Returns the red, green, blue, and alpha values in the 0-65535 range.
func (ARGB) ToARGB ¶
ToARGB returns the ARGB color itself (identity function). This method exists to satisfy the digitalColor interface.
func (ARGB) ToCam ¶
ToCam converts the ARGB color to CAM16 color appearance model. Returns a pointer to the Cam16 representation of the color.
func (ARGB) ToHct ¶
ToHct converts the ARGB color to HCT (Hue-Chroma-Tone) color space. Returns the HCT representation of the color.
func (ARGB) ToLab ¶
ToLab converts the ARGB color to CIE L*a*b* color space. Returns the Lab representation of the color.
func (ARGB) ToXYZ ¶
ToXYZ converts the ARGB color to CIE XYZ color space. Returns the XYZ representation of the color.
func (*ARGB) UnmarshalText ¶
UnmarshalText implements the encoding.UnmarshalText interface. Accepts #RRGGBB, #RRGGBBAA, RRGGBB, or RRGGBBAA formats for performance reasons. Returns an error if the string cannot be parsed as a valid color.
type Cam16 ¶
type Cam16 struct {
// Hue represents the hue of the color
Hue float64
// Chroma represents the colorfulness or color intensity, similar to
// saturation in HSL but more perceptually accurate
Chroma float64
// J represents the lightness of the color
J float64
// Q represents the brightness, which is the ratio of lightness to
// the white point's lightness
Q float64
// M represents the colorfulness of the color
M float64
// S represents the saturation, which is the ratio of chroma to
// the white point's chroma
S float64
// Jstar represents the CAM16-UCS J coordinate
Jstar float64
// Astar represents the CAM16-UCS a coordinate
Astar float64
// Bstar represents the CAM16-UCS b coordinate
Bstar float64
}
Cam16 represents the CAM16 color model, which includes various dimensions for color representation. It can be constructed using any combination of three of the following dimensions: j or q, c, m, or s, and hue. It can also be constructed using the CAM16-UCS J, a, and b coordinates.
func Cam16FromJch ¶
Cam16FromJch constructs a Cam16 color from J (lightness), C (chroma), and H (hue angle in degrees), using DefaultViewingConditions viewing conditions.
This is used when synthesizing a CAM16 color from HCT values or performing color space conversions into perceptual models.
func Cam16FromJchInEnv ¶
func Cam16FromJchInEnv(j, c, h float64, env *Environmnet) *Cam16
Cam16FromJchInEnv constructs a Cam16 color from J (lightness), C (chroma), and H (hue angle in degrees), using the given viewing conditions.
This is used when synthesizing a CAM16 color from HCT values or performing color space conversions into perceptual models.
func Cam16FromUcs ¶
Cam16FromUcs creates a CAM16 color from UCS coordinates (jstar, astar, bstar). Uses the default viewing environment for conversion.
func Cam16FromUcsInEnv ¶
func Cam16FromUcsInEnv(jstar, astar, bstar float64, env *Environmnet) *Cam16
Cam16FromUcsInEnv creates a CAM16 color from UCS coordinates (jstar, astar, bstar) using the specified viewing environment for conversion.
func Cam16FromXyzInEnv ¶
func Cam16FromXyzInEnv(xyz XYZ, env *Environmnet) *Cam16
Cam16FromXyzInEnv create a Cam16 color In specific ViewingConditions
func (*Cam16) RGBA ¶
RGBA implements the color.Color interface. Returns the red, green, blue, and alpha values in the 0-65535 range.
func (*Cam16) ToARGB ¶
ToARGB converts the CAM16 color to ARGB format. Uses the default viewing environment for conversion.
func (*Cam16) ToLab ¶
ToLab converts the CAM16 color to CIE L*a*b* color space. Uses the default viewing environment for conversion.
func (*Cam16) ToXYZ ¶
ToXYZ converts the CAM16 color to CIE XYZ color space. Uses the default viewing environment for conversion.
func (*Cam16) Viewed ¶
func (c *Cam16) Viewed(vc *Environmnet) XYZ
Viewed converts a CAM16 color to an ARGB integer based on the given viewing conditions
type Environmnet ¶
type Environmnet struct {
// N is the relative luminance of the background relative to the reference
// white.
N float64
// Aw is the achromatic response to the white point.
Aw float64
// Nbb is the brightness induction factor (background).
Nbb float64
// Ncb is the chromatic induction factor (background).
Ncb float64
// C is the surround exponential non-linearity factor.
C float64
// Nc is the chromatic induction factor (surround).
Nc float64
// RgbD is the degree of adaptation for each RGB channel after discounting
// the illuminant.
RgbD num.Vector3
// Fl is the luminance-level adaptation factor (nonlinear response).
Fl float64
// FlRoot is the fourth root of Fl, used in CAM16 computations.
FlRoot float64
// Z is a base exponential factor used in the CAM16 J calculation.
Z float64
}
Environmnet encapsulates all constants needed for CAM16 color conversions. These are intermediate values derived from the viewing environment and are used throughout the CAM16 model to compute perceptual color attributes.
func NewEnvironment ¶
func NewEnvironment( adaptingLuminance float64, backgroundLstar float64, surround float64, discountingIlluminant bool, ) Environmnet
NewEnvironment creates a ViewingConditions instance with the specified parameters.
type Hct ¶
Hct represents a color in the HCT (Hue, Chroma, Tone) color space.
HCT provides a perceptually accurate color measurement system that can accurately render colors in different lighting environments.
func NewHct ¶
NewHct creates an HCT color from hue, chroma, and tone values.
Params:
- hue: Hue angle in degrees (0-360, invalid values corrected).
- chroma: Colorfulness (0-max varies by hue/tone).
- tone: Lightness (0-100, invalid values corrected).
Returns Hct - The constructed HCT color.
func (Hct) Hash ¶
Hash generates a uint64 hash value for the HCT color. Returns uint64 - Efficient hash value for color comparison.
func (Hct) InViewingConditions ¶
func (h Hct) InViewingConditions(env *Environmnet) Hct
InViewingConditions adjusts color appearance for different environments. Uses CAM16 color appearance model to account for viewing conditions.
Params:
- env: *Environment containing viewing condition parameters.
Returns Hct - Color adjusted for specified viewing conditions.
func (Hct) IsBlue ¶
IsBlue checks if the hue falls in the blue range (250-270°). Returns bool - True if hue is in blue range.
func (Hct) IsCyan ¶
IsCyan checks if the hue falls in the cyan range (170-207°). Returns bool - True if hue is in cyan range.
func (Hct) IsYellow ¶
IsYellow checks if the hue falls in the yellow range (105-125°). Returns bool - True if hue is in yellow range.
func (Hct) RGBA ¶
RGBA implements the color.Color interface. Returns the red, green, blue, and alpha values in the 0-65535 range.
func (Hct) String ¶
String returns a formatted string representation of HCT color. Returns string - Formatted as "HCT(H, C, T)" with ANSI background.
func (Hct) ToARGB ¶
ToARGB converts HCT color to ARGB representation. Returns ARGB - 32-bit packed color value.
func (Hct) ToCam ¶
ToCam converts HCT color to CAM16 color appearance model. Returns *Cam16 - Pointer to CAM16 color representation.
func (Hct) ToHct ¶
ToHct returns the receiver (implements digitalColor interface). Returns Hct - The color itself.
type Lab ¶
type Lab struct {
L, A, B float64
}
Lab is the CIELAB color space, also referred to as L*a*b*, is a color space defined by the International Commission on Illumination (abbreviated CIE) in 1976. It expresses color as three values: L* for perceptual lightness and a* and b* for the four unique colors of human vision: red, green, blue and yellow. CIELAB was intended as a perceptually uniform space, where a given numerical change corresponds to a similar perceived change in color.
func (Lab) DistanceSquared ¶
DistanceSquared returns square of distance between two color
func (Lab) LuminanceY ¶
LuminanceY returns the Y value for XYZ color model from Lab color model
func (Lab) ToCam ¶
ToCam converts the Lab color to CAM16 color appearance model. Returns a pointer to the Cam16 representation of the color.
type OkLab ¶
type OkLab struct {
// L for perceptual lightness, ranging from 0 (pure black) to 1 (reference
// white), often denoted as a percentage
L float64
// A for green (negative) to red (positive)
A float64
// B for blue (negative) to yellow (positive)
B float64
}
OkLab color space is a uniform color space for device-independent color designed to improve perceptual uniformity, hue and lightness prediction, color blending, and usability while ensuring numerical stability and ease of implementation. Introduced by Björn Ottosson in December 2020.
func OkLabFromXYZ ¶
OkLabFromXYZ create a OkLab model from x,y,z value of XYZ color space