aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/SideChains/Colourful/Conversion/ColourfulConverter.ToLinearRGB.cs
blob: 2c6a8a821d65cd45fb525333dd53d54f2b912ee0 (plain)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using System;
using Colourful.Implementation.Conversion;

namespace Colourful.Conversion
{
    public partial class ColourfulConverter
    {
        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB(in RGBColor color)
        {
            var converter = RGBToLinearRGBConverter.Default;

            return converter.Convert(color);
        }

        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB(in XYZColor color)
        {
            // adaptation
            var adapted = TargetRGBWorkingSpace.WhitePoint.Equals(WhitePoint) || !IsChromaticAdaptationPerformed
                ? color
                : ChromaticAdaptation.Transform(color, WhitePoint, TargetRGBWorkingSpace.WhitePoint);

            // conversion to linear RGB
            var xyzConverter = GetXYZToLinearRGBConverter(TargetRGBWorkingSpace);
            var result = xyzConverter.Convert(adapted);
            return result;
        }

        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB(in xyYColor color)
        {
            var xyzColor = ToXYZ(color);
            var result = ToLinearRGB(xyzColor);
            return result;
        }

        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB(in LabColor color)
        {
            var xyzColor = ToXYZ(color);
            var result = ToLinearRGB(xyzColor);
            return result;
        }

        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB(in LChabColor color)
        {
            var xyzColor = ToXYZ(color);
            var result = ToLinearRGB(xyzColor);
            return result;
        }

        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB(in HunterLabColor color)
        {
            var xyzColor = ToXYZ(color);
            var result = ToLinearRGB(xyzColor);
            return result;
        }

        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB(in LuvColor color)
        {
            var xyzColor = ToXYZ(color);
            var result = ToLinearRGB(xyzColor);
            return result;
        }

        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB(in LChuvColor color)
        {
            var xyzColor = ToXYZ(color);
            var result = ToLinearRGB(xyzColor);
            return result;
        }

        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB(in LMSColor color)
        {
            var xyzColor = ToXYZ(color);
            var result = ToLinearRGB(xyzColor);
            return result;
        }

        /// <summary>
        /// Convert to linear RGB
        /// </summary>
        public LinearRGBColor ToLinearRGB<T>(T color) where T : IColorVector
        {
            switch (color)
            {
                case RGBColor typedColor:
                    return ToLinearRGB(in typedColor);
                case LinearRGBColor typedColor:
                    return typedColor;
                case XYZColor typedColor:
                    return ToLinearRGB(in typedColor);
                case xyYColor typedColor:
                    return ToLinearRGB(in typedColor);
                case HunterLabColor typedColor:
                    return ToLinearRGB(in typedColor);
                case LabColor typedColor:
                    return ToLinearRGB(in typedColor);
                case LChabColor typedColor:
                    return ToLinearRGB(in typedColor);
                case LuvColor typedColor:
                    return ToLinearRGB(in typedColor);
                case LChuvColor typedColor:
                    return ToLinearRGB(in typedColor);
                case LMSColor typedColor:
                    return ToLinearRGB(in typedColor);
                default:
                    throw new ArgumentException($"Cannot accept type '{typeof(T)}'.", nameof(color));
            }
        }
    }
}