Skia
2DGraphicsLibrary
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SkColor.h
Go to the documentation of this file.
1 /*
2  * Copyright 2006 The Android Open Source Project
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 SkColor_DEFINED
9 #define SkColor_DEFINED
10 
11 #include "SkScalar.h"
12 #include "SkPoint3.h"
13 #include "SkTypes.h"
14 
22 typedef uint8_t SkAlpha;
28 typedef uint32_t SkColor;
29 
33 {
34  SkASSERT(a <= 255 && r <= 255 && g <= 255 && b <= 255);
35 
36  return (a << 24) | (r << 16) | (g << 8) | (b << 0);
37 }
38 
39 #define SkColorSetARGBMacro(a, r, g, b) \
40  static_cast<SkColor>( \
41  (static_cast<U8CPU>(a) << 24) | \
42  (static_cast<U8CPU>(r) << 16) | \
43  (static_cast<U8CPU>(g) << 8) | \
44  (static_cast<U8CPU>(b) << 0))
45 
50 #if defined(NDEBUG)
51 #define SkColorSetARGB(a, r, g, b) SkColorSetARGBMacro(a, r, g, b)
52 #else
53 #define SkColorSetARGB(a, r, g, b) SkColorSetARGBInline(a, r, g, b)
54 #endif
55 
59 #define SkColorSetRGB(r, g, b) SkColorSetARGB(0xFF, r, g, b)
60 
62 #define SkColorGetA(color) (((color) >> 24) & 0xFF)
63 
64 #define SkColorGetR(color) (((color) >> 16) & 0xFF)
65 
66 #define SkColorGetG(color) (((color) >> 8) & 0xFF)
67 
68 #define SkColorGetB(color) (((color) >> 0) & 0xFF)
69 
70 static constexpr inline SkColor SkColorSetA(SkColor c, U8CPU a) {
71  return (c & 0x00FFFFFF) | (a << 24);
72 }
73 
74 // common colors
75 
77 #define SK_AlphaTRANSPARENT static_cast<SkAlpha>(0x00)
78 
79 #define SK_AlphaOPAQUE static_cast<SkAlpha>(0xFF)
80 
82 #define SK_ColorTRANSPARENT static_cast<SkColor>(0x00000000)
83 
85 #define SK_ColorBLACK static_cast<SkColor>(0xFF000000)
86 
87 #define SK_ColorDKGRAY static_cast<SkColor>(0xFF444444)
88 
89 #define SK_ColorGRAY static_cast<SkColor>(0xFF888888)
90 
91 #define SK_ColorLTGRAY static_cast<SkColor>(0xFFCCCCCC)
92 
93 #define SK_ColorWHITE static_cast<SkColor>(0xFFFFFFFF)
94 
96 #define SK_ColorRED static_cast<SkColor>(0xFFFF0000)
97 
98 #define SK_ColorGREEN static_cast<SkColor>(0xFF00FF00)
99 
100 #define SK_ColorBLUE static_cast<SkColor>(0xFF0000FF)
101 
102 #define SK_ColorYELLOW static_cast<SkColor>(0xFFFFFF00)
103 
104 #define SK_ColorCYAN static_cast<SkColor>(0xFF00FFFF)
105 
106 #define SK_ColorMAGENTA static_cast<SkColor>(0xFFFF00FF)
107 
109 
119 SK_API void SkRGBToHSV(U8CPU red, U8CPU green, U8CPU blue, SkScalar hsv[3]);
120 
128 static inline void SkColorToHSV(SkColor color, SkScalar hsv[3]) {
129  SkRGBToHSV(SkColorGetR(color), SkColorGetG(color), SkColorGetB(color), hsv);
130 }
131 
141 SK_API SkColor SkHSVToColor(U8CPU alpha, const SkScalar hsv[3]);
142 
151 static inline SkColor SkHSVToColor(const SkScalar hsv[3]) {
152  return SkHSVToColor(0xFF, hsv);
153 }
154 
156 
161 typedef uint32_t SkPMColor;
162 
165 SK_API SkPMColor SkPreMultiplyARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
171 
173 
174 struct SkPM4f;
175 
176 /*
177  * The float values are 0...1 unpremultiplied
178  */
179 struct SkColor4f {
180  float fR;
181  float fG;
182  float fB;
183  float fA;
184 
185  bool operator==(const SkColor4f& other) const {
186  return fA == other.fA && fR == other.fR && fG == other.fG && fB == other.fB;
187  }
188  bool operator!=(const SkColor4f& other) const {
189  return !(*this == other);
190  }
191 
192  const float* vec() const { return &fR; }
193  float* vec() { return &fR; }
194 
195  static SkColor4f Pin(float r, float g, float b, float a);
197  static SkColor4f FromColor(SkColor);
198  static SkColor4f FromColor3f(SkColor3f, float a);
199 
200  SkColor toSkColor() const;
201 
202  SkColor4f pin() const {
203  return Pin(fR, fG, fB, fA);
204  }
205 
206  SkPM4f premul() const;
207 };
208 
209 #endif
Definition: SkPoint3.h:13
SK_API SkColor SkHSVToColor(U8CPU alpha, const SkScalar hsv[3])
Convert HSV components to an ARGB color.
SK_API void SkRGBToHSV(U8CPU red, U8CPU green, U8CPU blue, SkScalar hsv[3])
Convert RGB components to HSV.
uint8_t SkAlpha
8-bit type for an alpha value.
Definition: SkColor.h:22
Definition: SkColor.h:179
SK_API SkPMColor SkPreMultiplyColor(SkColor c)
Return a SkPMColor value from a SkColor value.
#define SkColorGetG(color)
return the green byte from a SkColor value
Definition: SkColor.h:66
static SkColor SkColorSetARGBInline(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
Return a SkColor value from 8 bit component values.
Definition: SkColor.h:32
static SkColor4f FromColor(SkColor)
Convert to SkColor4f, assuming SkColor is sRGB.
SK_API SkPMColor SkPreMultiplyARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
Return a SkPMColor value from unpremultiplied 8 bit component values.
uint32_t SkPMColor
32 bit ARGB color value, premultiplied.
Definition: SkColor.h:161
uint32_t SkColor
32 bit ARGB color value, not premultiplied.
Definition: SkColor.h:28
static void SkColorToHSV(SkColor color, SkScalar hsv[3])
Convert the argb color to its HSV components.
Definition: SkColor.h:128
#define SkColorGetB(color)
return the blue byte from a SkColor value
Definition: SkColor.h:68
#define SkColorGetR(color)
return the red byte from a SkColor value
Definition: SkColor.h:64
unsigned U8CPU
Fast type for unsigned 8 bits.
Definition: SkTypes.h:191