Skia
2DGraphicsLibrary
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SkColorSpace.h
1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkColorSpace_DEFINED
9 #define SkColorSpace_DEFINED
10 
11 #include "SkMatrix44.h"
12 #include "SkRefCnt.h"
13 
14 class SkData;
15 
19 struct SK_API SkColorSpacePrimaries {
20  float fRX, fRY;
21  float fGX, fGY;
22  float fBX, fBY;
23  float fWX, fWY;
24 
29  bool toXYZD50(SkMatrix44* toXYZD50) const;
30 };
31 
43 struct SK_API SkColorSpaceTransferFn {
44  float fG;
45  float fA;
46  float fB;
47  float fC;
48  float fD;
49  float fE;
50  float fF;
51 
56  SkColorSpaceTransferFn invert() const;
57 };
58 
59 class SK_API SkColorSpace : public SkRefCnt {
60 public:
61 
65  static sk_sp<SkColorSpace> MakeSRGB();
66 
71  static sk_sp<SkColorSpace> MakeSRGBLinear();
72 
73  enum RenderTargetGamma : uint8_t {
74  kLinear_RenderTargetGamma,
75 
81  };
82 
83  enum Gamut {
84  kSRGB_Gamut,
85  kAdobeRGB_Gamut,
86  kDCIP3_D65_Gamut,
87  kRec2020_Gamut,
88  };
89 
96  static sk_sp<SkColorSpace> MakeRGB(RenderTargetGamma gamma, Gamut gamut);
97  static sk_sp<SkColorSpace> MakeRGB(RenderTargetGamma gamma, const SkMatrix44& toXYZD50);
98  static sk_sp<SkColorSpace> MakeRGB(const SkColorSpaceTransferFn& coeffs, Gamut gamut);
99  static sk_sp<SkColorSpace> MakeRGB(const SkColorSpaceTransferFn& coeffs,
100  const SkMatrix44& toXYZD50);
101 
105  static sk_sp<SkColorSpace> MakeICC(const void*, size_t);
106 
112  bool gammaCloseToSRGB() const;
113 
117  bool gammaIsLinear() const;
118 
125  bool isNumericalTransferFn(SkColorSpaceTransferFn* fn) const;
126 
131  bool toXYZD50(SkMatrix44* toXYZD50) const;
132 
145  bool isSRGB() const;
146 
151  sk_sp<SkData> serialize() const;
152 
157  size_t writeToMemory(void* memory) const;
158 
159  static sk_sp<SkColorSpace> Deserialize(const void* data, size_t length);
160 
165  static bool Equals(const SkColorSpace* src, const SkColorSpace* dst);
166 
167 private:
168  SkColorSpace() = default;
169  friend class SkColorSpace_Base;
170 
171  using INHERITED = SkRefCnt;
172 };
173 
174 enum class SkTransferFunctionBehavior {
178  kRespect,
179 
184  kIgnore,
185 };
186 
187 #endif
RenderTargetGamma
Definition: SkColorSpace.h:73
Transfer function is the canonical sRGB curve, which has a short linear segment followed by a 2...
Definition: SkColorSpace.h:80
Definition: SkColorSpace.h:59
The SkMatrix44 class holds a 4x4 matrix.
Definition: SkMatrix44.h:135
Definition: SkRefCnt.h:125
SkData holds an immutable data buffer.
Definition: SkData.h:22
Describes a color gamut with primaries and a white point.
Definition: SkColorSpace.h:19
Contains the coefficients for a common transfer function equation, specified as a transformation from...
Definition: SkColorSpace.h:43