Skia
2DGraphicsLibrary
 All Classes 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 inline SkColor SkColorSetA(SkColor c, U8CPU a) {
71  return (c & 0x00FFFFFF) | (a << 24);
72 }
73 
74 // common colors
75 
76 #define SK_AlphaTRANSPARENT 0x00
77 #define SK_AlphaOPAQUE 0xFF
78 
79 #define SK_ColorTRANSPARENT 0x00000000
80 
81 #define SK_ColorBLACK 0xFF000000
82 #define SK_ColorDKGRAY 0xFF444444
83 #define SK_ColorGRAY 0xFF888888
84 #define SK_ColorLTGRAY 0xFFCCCCCC
85 #define SK_ColorWHITE 0xFFFFFFFF
86 
87 #define SK_ColorRED 0xFFFF0000
88 #define SK_ColorGREEN 0xFF00FF00
89 #define SK_ColorBLUE 0xFF0000FF
90 #define SK_ColorYELLOW 0xFFFFFF00
91 #define SK_ColorCYAN 0xFF00FFFF
92 #define SK_ColorMAGENTA 0xFFFF00FF
93 
94 
105 SK_API void SkRGBToHSV(U8CPU red, U8CPU green, U8CPU blue, SkScalar hsv[3]);
106 
114 static inline void SkColorToHSV(SkColor color, SkScalar hsv[3]) {
115  SkRGBToHSV(SkColorGetR(color), SkColorGetG(color), SkColorGetB(color), hsv);
116 }
117 
127 SK_API SkColor SkHSVToColor(U8CPU alpha, const SkScalar hsv[3]);
128 
137 static inline SkColor SkHSVToColor(const SkScalar hsv[3]) {
138  return SkHSVToColor(0xFF, hsv);
139 }
140 
142 
147 typedef uint32_t SkPMColor;
148 
151 SK_API SkPMColor SkPreMultiplyARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
157 
161 
163 
164 struct SkPM4f;
165 
166 /*
167  * The float values are 0...1 unpremultiplied
168  */
169 struct SkColor4f {
170  float fR;
171  float fG;
172  float fB;
173  float fA;
174 
175  bool operator==(const SkColor4f& other) const {
176  return fA == other.fA && fR == other.fR && fG == other.fG && fB == other.fB;
177  }
178  bool operator!=(const SkColor4f& other) const {
179  return !(*this == other);
180  }
181 
182  const float* vec() const { return &fR; }
183  float* vec() { return &fR; }
184 
185  static SkColor4f Pin(float r, float g, float b, float a);
186  static SkColor4f FromColor(SkColor);
187  static SkColor4f FromColor3f(SkColor3f, float a);
188 
189  SkColor toSkColor() const;
190 
191  SkColor4f pin() const {
192  return Pin(fR, fG, fB, fA);
193  }
194 
195  SkPM4f premul() const;
196 };
197 
198 #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:169
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
SkPMColor(* SkXfermodeProc)(SkPMColor src, SkPMColor dst)
Define a function pointer type for combining two premultiplied colors.
Definition: SkColor.h:160
static SkColor SkColorSetARGBInline(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
Return a SkColor value from 8 bit component values.
Definition: SkColor.h:32
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:147
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:114
#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:251