• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#Topic Color
2#Alias Color_Reference ##
3
4#Code
5#Populate
6##
7
8Color constants can be helpful to write code, documenting the meaning of values
9the represent transparency and color values. The use of Color constants is not
10required.
11
12#Subtopic Functions
13#Line # routines to read, write, and manipulate SkColor ##
14##
15
16# ------------------------------------------------------------------------------
17
18#Subtopic Alpha
19#Line # transparency of Color ##
20
21Alpha represents the transparency of Color. Color with Alpha of zero is fully
22transparent. Color with Alpha of 255 is fully opaque. Some, but not all pixel
23formats contain Alpha. Pixels with Alpha may store it as unsigned integers or
24floating point values. Unsigned integer Alpha ranges from zero, fully
25transparent, to all bits set, fully opaque. Floating point Alpha ranges from
26zero, fully transparent, to one, fully opaque.
27
28#Alias Alpha
29#Substitute alpha
30##
31
32#Typedef uint8_t SkAlpha
33#Line # defines Alpha as eight bits ##
34
35#Code
36#Populate
37##
38
398-bit type for an alpha value. 255 is 100% opaque, zero is 100% transparent.
40
41#Typedef ##
42
43#Subtopic ##
44
45# ------------------------------------------------------------------------------
46
47#Typedef uint32_t SkColor
48#Line # defines Color as 32 bits ##
49
50#Code
51#Populate
52##
53
5432-bit ARGB Color value, Unpremultiplied. Color components are always in
55a known order. This is different from SkPMColor, which has its bytes in a configuration
56dependent order, to match the format of kBGRA_8888_SkColorType bitmaps. SkColor
57is the type used to specify colors in SkPaint and in gradients.
58
59Color that is Premultiplied has the same component values as Color
60that is Unpremultiplied if Alpha is 255, fully opaque, although may have the
61component values in a different order.
62
63#SeeAlso SkPMColor
64
65#Typedef ##
66
67# ------------------------------------------------------------------------------
68
69#Method static constexpr inline SkColor SkColorSetARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
70#In Functions
71#Line # returns Color_Alpha and RGB combined ##
72
73Returns Color value from 8-bit component values. Asserts if SK_DEBUG is defined
74if a, r, g, or b exceed 255. Since Color is Unpremultiplied, a may be smaller
75than the largest of r, g, and b.
76
77#Param a    amount of Alpha, from fully transparent (0) to fully opaque (255) ##
78#Param r    amount of red, from no red (0) to full red (255) ##
79#Param g    amount of green, from no green (0) to full green (255) ##
80#Param b    amount of blue, from no blue (0) to full blue (255) ##
81
82#Return color and alpha, Unpremultiplied ##
83
84#Example
85    canvas->drawColor(SK_ColorRED);
86    canvas->clipRect(SkRect::MakeWH(150, 150));
87    canvas->drawColor(SkColorSetARGB(0x80, 0x00, 0xFF, 0x00));
88    canvas->clipRect(SkRect::MakeWH(75, 75));
89    canvas->drawColor(SkColorSetARGB(0x80, 0x00, 0x00, 0xFF));
90##
91
92#SeeAlso SkColorSetRGB SkPaint::setARGB SkPaint::setColor SkColorSetA
93
94#Method ##
95
96# ------------------------------------------------------------------------------
97
98#Define SkColorSetRGB
99#Line # returns opaque Color ##
100
101#Code
102#Populate
103##
104
105Returns Color value from 8-bit component values, with Alpha set
106fully opaque to 255.
107
108#Param r    amount of red, from no red (0) to full red (255) ##
109#Param g    amount of green, from no green (0) to full green (255) ##
110#Param b    amount of blue, from no blue (0) to full blue (255) ##
111
112#Return     color with opaque alpha ##
113
114#Example
115    canvas->drawColor(SK_ColorRED);
116    canvas->clipRect(SkRect::MakeWH(150, 150));
117    canvas->drawColor(SkColorSetRGB(0x00, 0xFF, 0x00));
118    canvas->clipRect(SkRect::MakeWH(75, 75));
119    canvas->drawColor(SkColorSetRGB(0x00, 0x00, 0xFF));
120##
121
122#SeeAlso SkColorSetARGB
123
124#Define ##
125
126# ------------------------------------------------------------------------------
127
128#Define SkColorGetA
129#Line # returns Alpha component ##
130
131#Code
132#Populate
133##
134
135Returns Alpha byte from Color value.
136
137#Param color SkColor, a 32-bit unsigned int, in 0xAARRGGBB format ##
138
139#Example
140    SkPaint paint;
141    paint.setAntiAlias(true);
142    paint.setColor(SK_ColorRED);
143    for (int alpha = 255; alpha >= 0; alpha -= 17) {
144        paint.setAlpha(alpha);
145        canvas->drawRect({5, 5, 100, 20}, paint);
146        SkAlpha alphaInPaint = SkColorGetA(paint.getColor());
147        canvas->drawString(std::to_string(alphaInPaint).c_str(), 110, 18, paint);
148        canvas->translate(0, 15);
149    }
150##
151
152#SeeAlso SkPaint::getAlpha
153
154#Define ##
155
156# ------------------------------------------------------------------------------
157
158#Define SkColorGetR
159#Line # returns red component ##
160
161#Code
162#Populate
163##
164
165Returns red component of Color, from zero to 255.
166
167#Param color SkColor, a 32-bit unsigned int, in 0xAARRGGBB format ##
168#Return red byte ##
169
170#Example
171#Image 3
172   canvas->drawBitmap(source, 0, 0);
173   SkPaint bgPaint;
174   bgPaint.setColor(0xafffffff);
175   canvas->drawRect({20, 50, 80, 70}, bgPaint);
176   uint8_t red = SkColorGetR(source.getColor(226, 128));
177   canvas->drawString(std::to_string(red).c_str(), 40, 65, SkPaint());
178   canvas->drawLine(80, 70, 226, 128, SkPaint());
179##
180
181#SeeAlso SkColorGetG SkColorGetB
182
183#Define ##
184
185# ------------------------------------------------------------------------------
186
187#Define SkColorGetG
188#Line # returns green component ##
189
190#Code
191#Populate
192##
193
194Returns green component of Color, from zero to 255.
195
196#Param color SkColor, a 32-bit unsigned int, in 0xAARRGGBB format ##
197#Return green byte ##
198
199#Example
200#Image 3
201   canvas->drawBitmap(source, 0, 0);
202   SkPaint bgPaint;
203   bgPaint.setColor(0xafffffff);
204   canvas->drawRect({20, 50, 80, 70}, bgPaint);
205   uint8_t green = SkColorGetG(source.getColor(57, 192));
206   canvas->drawString(std::to_string(green).c_str(), 40, 65, SkPaint());
207   canvas->drawLine(80, 70, 57, 192, SkPaint());
208##
209
210#SeeAlso SkColorGetR SkColorGetB
211
212#Define ##
213
214# ------------------------------------------------------------------------------
215
216#Define SkColorGetB
217#Line # returns blue component ##
218
219#Code
220#Populate
221##
222
223Returns blue component of Color, from zero to 255.
224
225#Param color SkColor, a 32-bit unsigned int, in 0xAARRGGBB format ##
226#Return blue byte ##
227
228#Example
229#Image 3
230   canvas->drawBitmap(source, 0, 0);
231   SkPaint bgPaint;
232   bgPaint.setColor(0xafffffff);
233   canvas->drawRect({20, 50, 80, 70}, bgPaint);
234   uint8_t blue = SkColorGetB(source.getColor(168, 170));
235   canvas->drawString(std::to_string(blue).c_str(), 40, 65, SkPaint());
236   canvas->drawLine(80, 70, 168, 170, SkPaint());
237##
238
239#SeeAlso SkColorGetR SkColorGetG
240
241#Define ##
242
243# ------------------------------------------------------------------------------
244
245#Method static constexpr inline SkColor SkColorSetA(SkColor c, U8CPU a)
246#In Functions
247#Line # returns Color with transparency ##
248
249Returns Unpremultiplied Color with red, blue, and green set from c; and alpha set
250from a. Alpha component of c is ignored and is replaced by a in result.
251
252#Param c  packed RGB, eight bits per component ##
253#Param a  Alpha: transparent at zero, fully opaque at 255 ##
254
255#Return Color with transparency ##
256
257#Example
258#Image 3
259   canvas->drawBitmap(source, 0, 0);
260   for (int y = 0; y < 256; y += 16) {
261      for (int x = 0; x < 256; x += 16) {
262        SkColor color = source.getColor(x + 8, y + 8);
263        SkPaint paint;
264        paint.setColor(SkColorSetA(color, x + y));
265        canvas->drawRect(SkRect::MakeXYWH(x, y, 16, 16), paint);
266     }
267   }
268##
269
270#SeeAlso SkColorSetARGB
271
272#Method ##
273
274# ------------------------------------------------------------------------------
275
276#Subtopic Alpha_Constants
277#In Constant
278#Line # constants for Alpha ##
279#Filter SK_Alpha
280
281#Code
282#Populate
283##
284
285Alpha constants are conveniences to represent fully transparent and fully
286opaque colors and masks. Their use is not required.
287
288#Const SK_AlphaTRANSPARENT 0x00
289#Line # fully transparent SkAlpha ##
290Represents fully transparent SkAlpha value. SkAlpha ranges from zero,
291fully transparent; to 255, fully opaque.
292##
293#Const SK_AlphaOPAQUE 0xFF
294#Line # fully opaque SkAlpha ##
295Represents fully opaque SkAlpha value. SkAlpha ranges from zero,
296fully transparent; to 255, fully opaque.
297##
298
299#Example
300#Image 1
301#Height 128
302#Description
303Color the parts of the bitmap red if they mostly contain transparent pixels.
304##
305    std::vector<int32_t> srcPixels;
306    srcPixels.resize(source.height() * source.rowBytes());
307    SkPixmap pixmap(SkImageInfo::MakeN32Premul(source.width(), source.height()),
308                    &srcPixels.front(), source.rowBytes());
309    source.readPixels(pixmap, 0, 0);
310    for (int y = 0; y < 16; ++y) {
311        for (int x = 0; x < 16; ++x) {
312            int32_t* blockStart = &srcPixels.front() + y * source.width() * 16 + x * 16;
313            size_t transparentCount = 0;
314            for (int fillY = 0; fillY < source.height() / 16; ++fillY) {
315                for (int fillX = 0; fillX < source.width() / 16; ++fillX) {
316                    const SkColor color = SkUnPreMultiply::PMColorToColor(blockStart[fillX]);
317                    transparentCount += SkColorGetA(color) == SK_AlphaTRANSPARENT;
318                }
319                blockStart += source.width();
320            }
321            if (transparentCount > 200) {
322                blockStart = &srcPixels.front() + y * source.width() * 16 + x * 16;
323                for (int fillY = 0; fillY < source.height() / 16; ++fillY) {
324                    for (int fillX = 0; fillX < source.width() / 16; ++fillX) {
325                        blockStart[fillX] = SK_ColorRED;
326                    }
327                    blockStart += source.width();
328                }
329            }
330        }
331    }
332    SkBitmap bitmap;
333    bitmap.installPixels(pixmap);
334    canvas->drawBitmap(bitmap, 0, 0);
335##
336
337
338# ------------------------------------------------------------------------------
339
340#Example
341#Image 1
342#Height 128
343#Description
344Color the parts of the bitmap green if they contain fully opaque pixels.
345##
346    std::vector<int32_t> srcPixels;
347    srcPixels.resize(source.height() * source.rowBytes());
348    SkPixmap pixmap(SkImageInfo::MakeN32Premul(source.width(), source.height()),
349                    &srcPixels.front(), source.rowBytes());
350    source.readPixels(pixmap, 0, 0);
351    for (int y = 0; y < source.height(); ++y) {
352        for (int x = 0; x < source.width(); ++x) {
353            SkPMColor pixel = srcPixels[y * source.width() + x];
354            const SkColor color = SkUnPreMultiply::PMColorToColor(pixel);
355            if (SkColorGetA(color) == SK_AlphaOPAQUE) {
356                srcPixels[y * source.width() + x] = SK_ColorGREEN;
357            }
358        }
359    }
360    SkBitmap bitmap;
361    bitmap.installPixels(pixmap);
362    canvas->drawBitmap(bitmap, 0, 0);
363##
364
365#SeeAlso SkAlpha SK_ColorTRANSPARENT SK_ColorBLACK
366
367#Subtopic Alpha_Constants ##
368
369#Subtopic Color_Constants
370#In Constant
371#Line # constants for Color ##
372#Filter SK_Color
373
374#Code
375#Populate
376##
377
378Color names are provided as conveniences, but are not otherwise special.
379The values chosen for names may not be the same as values used by
380SVG, HTML, CSS, or colors named by a platform.
381
382#Const SK_ColorTRANSPARENT 0x00000000
383#Line # transparent Color ##
384    Represents fully transparent SkColor. May be used to initialize a destination
385    containing a mask or a non-rectangular image.
386##
387#Const SK_ColorBLACK 0xFF000000
388#Line # black Color ##
389    Represents fully opaque black.
390##
391#Const SK_ColorDKGRAY 0xFF444444
392#Line # dark gray Color ##
393    Represents fully opaque dark gray.
394    Note that SVG_darkgray is equivalent to 0xFFA9A9A9.
395##
396#Const SK_ColorGRAY 0xFF888888
397#Line # gray Color ##
398    Represents fully opaque gray.
399    Note that HTML_Gray is equivalent to 0xFF808080.
400##
401#Const SK_ColorLTGRAY 0xFFCCCCCC
402#Line # light gray Color ##
403    Represents fully opaque light gray. HTML_Silver is equivalent to 0xFFC0C0C0.
404    Note that SVG_lightgray is equivalent to 0xFFD3D3D3.
405##
406#Const SK_ColorWHITE 0xFFFFFFFF
407#Line # white Color ##
408    Represents fully opaque white.
409##
410#Const SK_ColorRED 0xFFFF0000
411#Line # red Color ##
412    Represents fully opaque red.
413##
414#Const SK_ColorGREEN 0xFF00FF00
415#Line # green Color ##
416    Represents fully opaque green. HTML_Lime is equivalent.
417    Note that HTML_Green is equivalent to 0xFF008000.
418##
419#Const SK_ColorBLUE 0xFF0000FF
420#Line # blue Color ##
421    Represents fully opaque blue.
422##
423#Const SK_ColorYELLOW 0xFFFFFF00
424#Line # yellow Color ##
425    Represents fully opaque yellow.
426##
427#Const SK_ColorCYAN 0xFF00FFFF
428#Line # cyan Color ##
429    Represents fully opaque cyan. HTML_Aqua is equivalent.
430##
431#Const SK_ColorMAGENTA 0xFFFF00FF
432#Line # magenta Color ##
433    Represents fully opaque magenta. HTML_Fuchsia is equivalent.
434##
435
436#Example
437###$
438$Function
439#define SKIA_COLOR_PAIR(name) "SK_Color" #name, SK_Color##name
440$$
441void draw(SkCanvas* canvas) {
442    struct ColorCompare {
443        const char* fSVGName;
444        SkColor fSVGColor;
445        const char* fSkiaName;
446        SkColor fSkiaColor;
447    } colorCompare[] = {  // see https://www.w3.org/TR/SVG/types.html#ColorKeywords
448        {"black",     SkColorSetRGB(  0,   0,   0),    SKIA_COLOR_PAIR(BLACK) },
449        {"darkgray",  SkColorSetRGB(169, 169, 169),    SKIA_COLOR_PAIR(DKGRAY) },
450        {"gray",      SkColorSetRGB(128, 128, 128),    SKIA_COLOR_PAIR(GRAY) },
451        {"lightgray", SkColorSetRGB(211, 211, 211),    SKIA_COLOR_PAIR(LTGRAY) },
452        {"white",     SkColorSetRGB(255, 255, 255),    SKIA_COLOR_PAIR(WHITE) },
453        {"red",       SkColorSetRGB(255,   0,   0),    SKIA_COLOR_PAIR(RED) },
454        {"green",     SkColorSetRGB(  0, 128,   0),    SKIA_COLOR_PAIR(GREEN) },
455        {"blue",      SkColorSetRGB(  0,   0, 255),    SKIA_COLOR_PAIR(BLUE) },
456        {"yellow",    SkColorSetRGB(255, 255,   0),    SKIA_COLOR_PAIR(YELLOW) },
457        {"aqua",      SkColorSetRGB(  0, 255, 255),    SKIA_COLOR_PAIR(CYAN) },
458        {"fuchsia",   SkColorSetRGB(255,   0, 255),    SKIA_COLOR_PAIR(MAGENTA) },
459    };
460    SkPaint paint;
461    paint.setAntiAlias(true);
462    paint.setTextSize(14);
463    for (auto compare : colorCompare) {
464        paint.setStyle(SkPaint::kFill_Style);
465        paint.setColor(compare.fSVGColor);
466        canvas->drawRect({5, 5, 15, 15}, paint);
467        paint.setColor(SK_ColorBLACK);
468        canvas->drawString(compare.fSVGName, 20, 16, paint);
469        paint.setColor(compare.fSkiaColor);
470        canvas->drawRect({105, 5, 115, 15}, paint);
471        paint.setColor(SK_ColorBLACK);
472        canvas->drawString(compare.fSkiaName, 120, 16, paint);
473        paint.setStyle(SkPaint::kStroke_Style);
474        canvas->drawRect({5, 5, 15, 15}, paint);
475        canvas->drawRect({105, 5, 115, 15}, paint);
476        canvas->translate(0, 20);
477    }
478}
479$$$#
480##
481
482#Example
483#Description
484SK_ColorTRANSPARENT sets Color Alpha and components to zero.
485##
486#Image 3
487    std::vector<uint32_t> srcPixels;
488    constexpr int width = 256;
489    constexpr int height = 256;
490    srcPixels.resize(width * height);
491    SkImageInfo imageInfo = SkImageInfo::MakeN32Premul(width, height);
492    SkPixmap pixmap(imageInfo, &srcPixels.front(), imageInfo.minRowBytes());
493    pixmap.erase(SK_ColorTRANSPARENT);
494    pixmap.erase(SK_ColorRED, { 24, 24, 192, 192 } );
495    pixmap.erase(SK_ColorTRANSPARENT, { 48, 48, 168, 168 } );
496    SkBitmap bitmap;
497    bitmap.installPixels(pixmap);
498    canvas->drawBitmap(bitmap, 0, 0);
499    canvas->drawBitmap(bitmap, 48, 48);
500##
501
502#Example
503#Description
504SK_ColorBLACK sets Color Alpha to one and components to zero.
505##
506    std::vector<uint32_t> srcPixels;
507    constexpr int width = 256;
508    constexpr int height = 256;
509    srcPixels.resize(width * height);
510    SkImageInfo imageInfo = SkImageInfo::MakeN32Premul(width, height);
511    SkPixmap pixmap(imageInfo, &srcPixels.front(), imageInfo.minRowBytes());
512    pixmap.erase(SK_ColorTRANSPARENT);
513    pixmap.erase(SK_ColorRED, { 24, 24, 192, 192 } );
514    pixmap.erase(SK_ColorBLACK, { 48, 48, 168, 168 } );
515    SkBitmap bitmap;
516    bitmap.installPixels(pixmap);
517    canvas->drawBitmap(bitmap, 0, 0);
518    canvas->drawBitmap(bitmap, 48, 48);
519##
520
521#Example
522#Description
523SK_ColorWHITE sets Color Alpha and components to one.
524##
525    std::vector<uint32_t> srcPixels;
526    constexpr int width = 256;
527    constexpr int height = 256;
528    srcPixels.resize(width * height);
529    SkImageInfo imageInfo = SkImageInfo::MakeN32Premul(width, height);
530    SkPixmap pixmap(imageInfo, &srcPixels.front(), imageInfo.minRowBytes());
531    pixmap.erase(SK_ColorTRANSPARENT);
532    pixmap.erase(SK_ColorRED, { 24, 24, 192, 192 } );
533    pixmap.erase(SK_ColorWHITE, { 48, 48, 168, 168 } );
534    SkBitmap bitmap;
535    bitmap.installPixels(pixmap);
536    canvas->drawBitmap(bitmap, 0, 0);
537    canvas->drawBitmap(bitmap, 48, 48);
538##
539
540#SeeAlso SK_ColorTRANSPARENT SkCanvas::clear SK_AlphaOPAQUE
541
542#Subtopic Color_Constants ##
543
544# ------------------------------------------------------------------------------
545
546#Subtopic HSV
547#Line # hue saturation value color representation ##
548
549#Subtopic Hue
550Hue represents an angle, in degrees, on a color wheel. Hue has a positive value
551modulo 360, where zero degrees is red.
552##
553
554#Subtopic Saturation
555Saturation represents the intensity of the color. Saturation varies from zero,
556with no Hue contribution; to one, with full Hue contribution.
557##
558
559#Subtopic Value
560Value represents the lightness of the color. Value varies from zero, black; to
561one, full brightness.
562##
563
564#Method void SkRGBToHSV(U8CPU red, U8CPU green, U8CPU blue, SkScalar hsv[3])
565#In Functions
566#Line # converts RGB to HSV ##
567
568Converts RGB to its HSV components.
569hsv[0] contains HSV_Hue, a value from zero to less than 360.
570hsv[1] contains HSV_Saturation, a value from zero to one.
571hsv[2] contains HSV_Value, a value from zero to one.
572
573#Param red  red component value from zero to 255 ##
574#Param green  green component value from zero to 255 ##
575#Param blue  blue component value from zero to 255 ##
576#Param hsv  three element array which holds the resulting HSV components
577##
578
579#Example
580#Image 3
581   canvas->drawBitmap(source, 0, 0);
582   SkPaint bgPaint;
583   bgPaint.setColor(0xafffffff);
584   canvas->drawRect({20, 30, 110, 90}, bgPaint);
585   SkScalar hsv[3];
586   SkColor c = source.getColor(226, 128);
587   SkRGBToHSV(SkColorGetR(c), SkColorGetG(c), SkColorGetB(c), hsv);
588   canvas->drawString(("h: " + std::to_string(hsv[0]).substr(0, 6)).c_str(), 27, 45, SkPaint());
589   canvas->drawString(("s: " + std::to_string(hsv[1]).substr(0, 6)).c_str(), 27, 65, SkPaint());
590   canvas->drawString(("v: " + std::to_string(hsv[2]).substr(0, 6)).c_str(), 27, 85, SkPaint());
591   canvas->drawLine(110, 90, 226, 128, SkPaint());
592##
593
594#SeeAlso SkColorToHSV SkHSVToColor
595
596#Method ##
597
598# ------------------------------------------------------------------------------
599
600#Method static void SkColorToHSV(SkColor color, SkScalar hsv[3])
601#In Functions
602#Line # converts RGB to HSV ##
603
604Converts ARGB to its HSV components. Alpha in ARGB is ignored.
605hsv[0] contains HSV_Hue, and is assigned a value from zero to less than 360.
606hsv[1] contains HSV_Saturation, a value from zero to one.
607hsv[2] contains HSV_Value, a value from zero to one.
608
609#Param color  ARGB color to convert
610##
611#Param hsv  three element array which holds the resulting HSV components
612##
613
614#Example
615#Image 3
616   canvas->drawBitmap(source, 0, 0);
617   for (int y = 0; y < 256; ++y) {
618      for (int x = 0; x < 256; ++x) {
619        SkScalar hsv[3];
620        SkColorToHSV(source.getColor(x, y), hsv);
621        hsv[1] = 1 - hsv[1];
622        SkPaint paint;
623        paint.setColor(SkHSVToColor(hsv));
624        canvas->drawRect(SkRect::MakeXYWH(x, y, 1, 1), paint);
625     }
626   }
627##
628
629#SeeAlso SkRGBToHSV SkHSVToColor
630
631#Method ##
632
633# ------------------------------------------------------------------------------
634
635#Method SkColor SkHSVToColor(U8CPU alpha, const SkScalar hsv[3])
636#In Functions
637#Line # converts HSV with Alpha to RGB ##
638
639Converts HSV components to an ARGB color. Alpha is passed through unchanged.
640hsv[0] represents HSV_Hue, an angle from zero to less than 360.
641hsv[1] represents HSV_Saturation, and varies from zero to one.
642hsv[2] represents HSV_Value, and varies from zero to one.
643
644Out of range hsv values are pinned.
645
646#Param alpha  Alpha component of the returned ARGB color
647##
648#Param hsv  three element array which holds the input HSV components
649##
650
651#Return  ARGB equivalent to HSV
652##
653
654#Example
655#Image 3
656   canvas->drawBitmap(source, 0, 0);
657   for (int y = 0; y < 256; ++y) {
658      for (int x = 0; x < 256; ++x) {
659        SkColor color = source.getColor(x, y);
660        SkScalar hsv[3];
661        SkColorToHSV(color, hsv);
662        hsv[0] = hsv[0] + 90 >= 360 ? hsv[0] - 270 : hsv[0] + 90;
663        SkPaint paint;
664        paint.setColor(SkHSVToColor(x + y, hsv));
665        canvas->drawRect(SkRect::MakeXYWH(x, y, 1, 1), paint);
666     }
667   }
668##
669
670#SeeAlso SkColorToHSV SkRGBToHSV
671
672#Method ##
673
674# ------------------------------------------------------------------------------
675
676#Method static SkColor SkHSVToColor(const SkScalar hsv[3])
677#In Functions
678#Line # converts HSV to RGB ##
679
680Converts HSV components to an ARGB color. Alpha is set to 255.
681hsv[0] represents HSV_Hue, an angle from zero to less than 360.
682hsv[1] represents HSV_Saturation, and varies from zero to one.
683hsv[2] represents HSV_Value, and varies from zero to one.
684
685Out of range hsv values are pinned.
686
687#Param hsv  three element array which holds the input HSV components
688##
689
690#Return  RGB equivalent to HSV
691##
692
693#Example
694#Image 3
695   canvas->drawBitmap(source, 0, 0);
696   for (int y = 0; y < 256; ++y) {
697      for (int x = 0; x < 256; ++x) {
698        SkColor color = source.getColor(x, y);
699        SkScalar hsv[3];
700        SkColorToHSV(color, hsv);
701        hsv[0] = hsv[0] + 90 >= 360 ? hsv[0] - 270 : hsv[0] + 90;
702        SkPaint paint;
703        paint.setColor(SkHSVToColor(hsv));
704        canvas->drawRect(SkRect::MakeXYWH(x, y, 1, 1), paint);
705     }
706   }
707##
708
709#SeeAlso SkColorToHSV SkRGBToHSV
710
711#Method ##
712
713#Subtopic HSV ##
714
715# ------------------------------------------------------------------------------
716
717#Subtopic PM_Color
718#Line # color components premultiplied by Alpha ##
719
720#Typedef uint32_t SkPMColor
721#Line # defines Premultiplied Color as 32 bits ##
722
723#Code
724#Populate
725##
726
72732-bit ARGB color value, Premultiplied. The byte order for this value is
728configuration dependent, matching the format of kBGRA_8888_SkColorType bitmaps.
729This is different from SkColor, which is Unpremultiplied, and is always in the
730same byte order.
731
732#Typedef ##
733
734# ------------------------------------------------------------------------------
735
736#Method SkPMColor SkPreMultiplyARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
737#In Functions
738#Line # converts Unpremultiplied ARGB to Premultiplied PM_Color ##
739
740Returns a SkPMColor value from Unpremultiplied 8-bit component values.
741
742#Param a    amount of Alpha, from fully transparent (0) to fully opaque (255) ##
743#Param r    amount of red, from no red (0) to full red (255) ##
744#Param g    amount of green, from no green (0) to full green (255) ##
745#Param b    amount of blue, from no blue (0) to full blue (255) ##
746
747#Return Premultiplied Color ##
748
749#Example
750#Height 128
751#Width 300
752    SkPMColor premultiplied = SkPreMultiplyARGB(160, 128, 160, 192);
753    canvas->drawString("Unpremultiplied:", 20, 20, SkPaint());
754    canvas->drawString("alpha=160 red=128 green=160 blue=192", 20, 40, SkPaint());
755    canvas->drawString("Premultiplied:", 20, 80, SkPaint());
756    std::string str = "alpha=" + std::to_string(SkColorGetA(premultiplied));
757    str += " red=" + std::to_string(SkColorGetR(premultiplied));
758    str += " green=" + std::to_string(SkColorGetG(premultiplied));
759    str += " blue=" + std::to_string(SkColorGetB(premultiplied));
760    canvas->drawString(str.c_str(), 20, 100, SkPaint());
761##
762
763#SeeAlso SkPreMultiplyColor
764
765#Method ##
766
767# ------------------------------------------------------------------------------
768
769#Method SkPMColor SkPreMultiplyColor(SkColor c)
770#In Functions
771#Line # converts Unpremultiplied Color to Premultiplied PM_Color ##
772
773Returns PM_Color closest to Color c. Multiplies c RGB components by the c Alpha,
774and arranges the bytes to match the format of kN32_SkColorType.
775
776#Param c  Unpremultiplied ARGB Color  ##
777
778#Return Premultiplied Color ##
779
780#Example
781#Height 128
782#Width 300
783    SkColor unpremultiplied = SkColorSetARGB(160, 128, 160, 192);
784    SkPMColor premultiplied = SkPreMultiplyColor(unpremultiplied);
785    canvas->drawString("Unpremultiplied:", 20, 20, SkPaint());
786    std::string str = "alpha=" + std::to_string(SkColorGetA(unpremultiplied));
787    str += " red=" + std::to_string(SkColorGetR(unpremultiplied));
788    str += " green=" + std::to_string(SkColorGetG(unpremultiplied));
789    str += " blue=" + std::to_string(SkColorGetB(unpremultiplied));
790    canvas->drawString(str.c_str(), 20, 40, SkPaint());
791    canvas->drawString("Premultiplied:", 20, 80, SkPaint());
792    str = "alpha=" + std::to_string(SkColorGetA(premultiplied));
793    str += " red=" + std::to_string(SkColorGetR(premultiplied));
794    str += " green=" + std::to_string(SkColorGetG(premultiplied));
795    str += " blue=" + std::to_string(SkColorGetB(premultiplied));
796    canvas->drawString(str.c_str(), 20, 100, SkPaint());
797##
798
799#SeeAlso SkPreMultiplyARGB
800
801#Method ##
802
803#Subtopic PM_Color ##
804
805#Topic Color ##
806