-
Notifications
You must be signed in to change notification settings - Fork 1
/
color-profile_test.go
83 lines (68 loc) · 2.74 KB
/
color-profile_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright (c) 2021-2022 David Vogel
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
package emission
import (
"math"
"testing"
)
// Scaled sRGB primaries with a white point of D65.
var (
standardRGBRed = CIE1931XYZAbs{0.4124564, 0.2126729, 0.0193339}
standardRGBGreen = CIE1931XYZAbs{0.3575761, 0.7151522, 0.1191920}
standardRGBBlue = CIE1931XYZAbs{0.1804375, 0.0721750, 0.9503041}
)
func TestDCSToXYZ1(t *testing.T) {
// Color profile with sRGB primaries, but linear transfer function.
colorProfile := &ColorProfileGeneral{
PrimaryColors: TransformationLinDCSToXYZ{standardRGBRed, standardRGBGreen, standardRGBBlue},
}
colorProfile.MustInit()
color, err := colorProfile.DCSToXYZ([]float64{1, 0, 0})
if err != nil {
t.Fatalf("DCSToXYZ() failed: %v", err)
}
if color != standardRGBRed {
t.Errorf("DCSToXYZ() returned wrong color result. Got %v, want %v", color, standardRGBRed)
}
}
func TestXYZToDCS1(t *testing.T) {
// Color profile with only one primary, and linear transfer function.
colorProfile := &ColorProfileGeneral{
PrimaryColors: TransformationLinDCSToXYZ{standardRGBRed},
}
colorProfile.MustInit()
dcsVector := colorProfile.XYZToDCS(standardRGBRed.Scaled(0.4))
want := DCSVector{0.4}
if diff, err := want.Difference(dcsVector); err != nil || math.Abs(diff.ComponentSum()) > 0.000001 {
t.Errorf("XYZToDCS() returned wrong device color space vector. Got %v, want %v", dcsVector, want)
}
}
func TestXYZToDCS2(t *testing.T) {
// Color profile with only two primaries, and linear transfer function.
colorProfile := &ColorProfileGeneral{
PrimaryColors: TransformationLinDCSToXYZ{standardRGBRed, standardRGBGreen},
}
colorProfile.MustInit()
dcsVector := colorProfile.XYZToDCS(standardRGBGreen.Sum(standardRGBRed.Scaled(0.5)))
want := DCSVector{0.5, 1}
if diff, err := want.Difference(dcsVector); err != nil || math.Abs(diff.ComponentSum()) > 0.000001 {
t.Errorf("XYZToDCS() returned wrong device color space vector. Got %v, want %v", dcsVector, want)
}
}
func TestXYZToDCS3(t *testing.T) {
// Color profile with sRGB primaries.
colorProfile := &ColorProfileGeneral{
WhitePointColor: CIE1931XYZAbs{}.Sum(standardRGBRed, standardRGBGreen, standardRGBBlue),
PrimaryColors: TransformationLinDCSToXYZ{standardRGBRed, standardRGBGreen, standardRGBBlue},
OutputLimiter: OutputLimiterSum{3},
TransferFunc: TransferFunctionStandardRGB,
}
colorProfile.MustInit()
dcsVector := colorProfile.XYZToDCS(CIE1931XYZAbs{0.5, 0.4, 0.3})
want := DCSVector{0.933728, 0.564098, 0.550101}
if diff, err := want.Difference(dcsVector); err != nil || math.Abs(diff.ComponentSum()) > 0.000001 {
t.Errorf("XYZToDCS() returned wrong device color space vector. Got %v, want %v", dcsVector, want)
}
}