| #Topic Color |
| #Alias Color_Reference ## |
| |
| #Code |
| #Populate |
| ## |
| |
| Color constants can be helpful to write code, documenting the meaning of values |
| the represent transparency and color values. The use of Color constants is not |
| required. |
| |
| #Subtopic Functions |
| #Line # routines to read, write, and manipulate SkColor ## |
| ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Subtopic Alpha |
| #Line # transparency of Color ## |
| |
| Alpha represents the transparency of Color. Color with Alpha of zero is fully |
| transparent. Color with Alpha of 255 is fully opaque. Some, but not all pixel |
| formats contain Alpha. Pixels with Alpha may store it as unsigned integers or |
| floating point values. Unsigned integer Alpha ranges from zero, fully |
| transparent, to all bits set, fully opaque. Floating point Alpha ranges from |
| zero, fully transparent, to one, fully opaque. |
| |
| #Alias Alpha |
| #Substitute alpha |
| ## |
| |
| #Typedef uint8_t SkAlpha |
| #Line # defines Alpha as eight bits ## |
| |
| #Code |
| #Populate |
| ## |
| |
| 8-bit type for an alpha value. 255 is 100% opaque, zero is 100% transparent. |
| |
| #Typedef ## |
| |
| #Subtopic ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Typedef uint32_t SkColor |
| #Line # defines Color as 32 bits ## |
| |
| #Code |
| #Populate |
| ## |
| |
| 32-bit ARGB Color value, Unpremultiplied. Color components are always in |
| a known order. This is different from SkPMColor, which has its bytes in a configuration |
| dependent order, to match the format of kBGRA_8888_SkColorType bitmaps. SkColor |
| is the type used to specify colors in SkPaint and in gradients. |
| |
| Color that is Premultiplied has the same component values as Color |
| that is Unpremultiplied if Alpha is 255, fully opaque, although may have the |
| component values in a different order. |
| |
| #SeeAlso SkPMColor |
| |
| #Typedef ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Method static constexpr inline SkColor SkColorSetARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) |
| #In Functions |
| #Line # returns Color_Alpha and RGB combined ## |
| |
| Returns Color value from 8-bit component values. Asserts if SK_DEBUG is defined |
| if a, r, g, or b exceed 255. Since Color is Unpremultiplied, a may be smaller |
| than the largest of r, g, and b. |
| |
| #Param a amount of Alpha, from fully transparent (0) to fully opaque (255) ## |
| #Param r amount of red, from no red (0) to full red (255) ## |
| #Param g amount of green, from no green (0) to full green (255) ## |
| #Param b amount of blue, from no blue (0) to full blue (255) ## |
| |
| #Return color and alpha, Unpremultiplied ## |
| |
| #Example |
| canvas->drawColor(SK_ColorRED); |
| canvas->clipRect(SkRect::MakeWH(150, 150)); |
| canvas->drawColor(SkColorSetARGB(0x80, 0x00, 0xFF, 0x00)); |
| canvas->clipRect(SkRect::MakeWH(75, 75)); |
| canvas->drawColor(SkColorSetARGB(0x80, 0x00, 0x00, 0xFF)); |
| ## |
| |
| #SeeAlso SkColorSetRGB SkPaint::setARGB SkPaint::setColor SkColorSetA |
| |
| #Method ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Define SkColorSetRGB |
| #Line # returns opaque Color ## |
| |
| #Code |
| #Populate |
| ## |
| |
| Returns Color value from 8-bit component values, with Alpha set |
| fully opaque to 255. |
| |
| #Param r amount of red, from no red (0) to full red (255) ## |
| #Param g amount of green, from no green (0) to full green (255) ## |
| #Param b amount of blue, from no blue (0) to full blue (255) ## |
| |
| #Return color with opaque alpha ## |
| |
| #Example |
| canvas->drawColor(SK_ColorRED); |
| canvas->clipRect(SkRect::MakeWH(150, 150)); |
| canvas->drawColor(SkColorSetRGB(0x00, 0xFF, 0x00)); |
| canvas->clipRect(SkRect::MakeWH(75, 75)); |
| canvas->drawColor(SkColorSetRGB(0x00, 0x00, 0xFF)); |
| ## |
| |
| #SeeAlso SkColorSetARGB |
| |
| #Define ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Define SkColorGetA |
| #Line # returns Alpha component ## |
| |
| #Code |
| #Populate |
| ## |
| |
| Returns Alpha byte from Color value. |
| |
| #Param color SkColor, a 32-bit unsigned int, in 0xAARRGGBB format ## |
| |
| #Example |
| SkPaint paint; |
| paint.setAntiAlias(true); |
| paint.setColor(SK_ColorRED); |
| for (int alpha = 255; alpha >= 0; alpha -= 17) { |
| paint.setAlpha(alpha); |
| canvas->drawRect({5, 5, 100, 20}, paint); |
| SkAlpha alphaInPaint = SkColorGetA(paint.getColor()); |
| canvas->drawString(std::to_string(alphaInPaint).c_str(), 110, 18, paint); |
| canvas->translate(0, 15); |
| } |
| ## |
| |
| #SeeAlso SkPaint::getAlpha |
| |
| #Define ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Define SkColorGetR |
| #Line # returns red component ## |
| |
| #Code |
| #Populate |
| ## |
| |
| Returns red component of Color, from zero to 255. |
| |
| #Param color SkColor, a 32-bit unsigned int, in 0xAARRGGBB format ## |
| #Return red byte ## |
| |
| #Example |
| #Image 3 |
| canvas->drawBitmap(source, 0, 0); |
| SkPaint bgPaint; |
| bgPaint.setColor(0xafffffff); |
| canvas->drawRect({20, 50, 80, 70}, bgPaint); |
| uint8_t red = SkColorGetR(source.getColor(226, 128)); |
| canvas->drawString(std::to_string(red).c_str(), 40, 65, SkPaint()); |
| canvas->drawLine(80, 70, 226, 128, SkPaint()); |
| ## |
| |
| #SeeAlso SkColorGetG SkColorGetB |
| |
| #Define ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Define SkColorGetG |
| #Line # returns green component ## |
| |
| #Code |
| #Populate |
| ## |
| |
| Returns green component of Color, from zero to 255. |
| |
| #Param color SkColor, a 32-bit unsigned int, in 0xAARRGGBB format ## |
| #Return green byte ## |
| |
| #Example |
| #Image 3 |
| canvas->drawBitmap(source, 0, 0); |
| SkPaint bgPaint; |
| bgPaint.setColor(0xafffffff); |
| canvas->drawRect({20, 50, 80, 70}, bgPaint); |
| uint8_t green = SkColorGetG(source.getColor(57, 192)); |
| canvas->drawString(std::to_string(green).c_str(), 40, 65, SkPaint()); |
| canvas->drawLine(80, 70, 57, 192, SkPaint()); |
| ## |
| |
| #SeeAlso SkColorGetR SkColorGetB |
| |
| #Define ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Define SkColorGetB |
| #Line # returns blue component ## |
| |
| #Code |
| #Populate |
| ## |
| |
| Returns blue component of Color, from zero to 255. |
| |
| #Param color SkColor, a 32-bit unsigned int, in 0xAARRGGBB format ## |
| #Return blue byte ## |
| |
| #Example |
| #Image 3 |
| canvas->drawBitmap(source, 0, 0); |
| SkPaint bgPaint; |
| bgPaint.setColor(0xafffffff); |
| canvas->drawRect({20, 50, 80, 70}, bgPaint); |
| uint8_t blue = SkColorGetB(source.getColor(168, 170)); |
| canvas->drawString(std::to_string(blue).c_str(), 40, 65, SkPaint()); |
| canvas->drawLine(80, 70, 168, 170, SkPaint()); |
| ## |
| |
| #SeeAlso SkColorGetR SkColorGetG |
| |
| #Define ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Method static constexpr inline SkColor SkColorSetA(SkColor c, U8CPU a) |
| #In Functions |
| #Line # returns Color with transparency ## |
| |
| Returns Unpremultiplied Color with red, blue, and green set from c; and alpha set |
| from a. Alpha component of c is ignored and is replaced by a in result. |
| |
| #Param c packed RGB, eight bits per component ## |
| #Param a Alpha: transparent at zero, fully opaque at 255 ## |
| |
| #Return Color with transparency ## |
| |
| #Example |
| #Image 3 |
| canvas->drawBitmap(source, 0, 0); |
| for (int y = 0; y < 256; y += 16) { |
| for (int x = 0; x < 256; x += 16) { |
| SkColor color = source.getColor(x + 8, y + 8); |
| SkPaint paint; |
| paint.setColor(SkColorSetA(color, x + y)); |
| canvas->drawRect(SkRect::MakeXYWH(x, y, 16, 16), paint); |
| } |
| } |
| ## |
| |
| #SeeAlso SkColorSetARGB |
| |
| #Method ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Subtopic Alpha_Constants |
| #In Constant |
| #Line # constants for Alpha ## |
| #Filter SK_Alpha |
| |
| #Code |
| #Populate |
| ## |
| |
| Alpha constants are conveniences to represent fully transparent and fully |
| opaque colors and masks. Their use is not required. |
| |
| #Const SK_AlphaTRANSPARENT 0x00 |
| #Line # fully transparent SkAlpha ## |
| Represents fully transparent SkAlpha value. SkAlpha ranges from zero, |
| fully transparent; to 255, fully opaque. |
| ## |
| #Const SK_AlphaOPAQUE 0xFF |
| #Line # fully opaque SkAlpha ## |
| Represents fully opaque SkAlpha value. SkAlpha ranges from zero, |
| fully transparent; to 255, fully opaque. |
| ## |
| |
| #Example |
| #Image 1 |
| #Height 128 |
| #Description |
| Color the parts of the bitmap red if they mostly contain transparent pixels. |
| ## |
| std::vector<int32_t> srcPixels; |
| srcPixels.resize(source.height() * source.rowBytes()); |
| SkPixmap pixmap(SkImageInfo::MakeN32Premul(source.width(), source.height()), |
| &srcPixels.front(), source.rowBytes()); |
| source.readPixels(pixmap, 0, 0); |
| for (int y = 0; y < 16; ++y) { |
| for (int x = 0; x < 16; ++x) { |
| int32_t* blockStart = &srcPixels.front() + y * source.width() * 16 + x * 16; |
| size_t transparentCount = 0; |
| for (int fillY = 0; fillY < source.height() / 16; ++fillY) { |
| for (int fillX = 0; fillX < source.width() / 16; ++fillX) { |
| const SkColor color = SkUnPreMultiply::PMColorToColor(blockStart[fillX]); |
| transparentCount += SkColorGetA(color) == SK_AlphaTRANSPARENT; |
| } |
| blockStart += source.width(); |
| } |
| if (transparentCount > 200) { |
| blockStart = &srcPixels.front() + y * source.width() * 16 + x * 16; |
| for (int fillY = 0; fillY < source.height() / 16; ++fillY) { |
| for (int fillX = 0; fillX < source.width() / 16; ++fillX) { |
| blockStart[fillX] = SK_ColorRED; |
| } |
| blockStart += source.width(); |
| } |
| } |
| } |
| } |
| SkBitmap bitmap; |
| bitmap.installPixels(pixmap); |
| canvas->drawBitmap(bitmap, 0, 0); |
| ## |
| |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Example |
| #Image 1 |
| #Height 128 |
| #Description |
| Color the parts of the bitmap green if they contain fully opaque pixels. |
| ## |
| std::vector<int32_t> srcPixels; |
| srcPixels.resize(source.height() * source.rowBytes()); |
| SkPixmap pixmap(SkImageInfo::MakeN32Premul(source.width(), source.height()), |
| &srcPixels.front(), source.rowBytes()); |
| source.readPixels(pixmap, 0, 0); |
| for (int y = 0; y < source.height(); ++y) { |
| for (int x = 0; x < source.width(); ++x) { |
| SkPMColor pixel = srcPixels[y * source.width() + x]; |
| const SkColor color = SkUnPreMultiply::PMColorToColor(pixel); |
| if (SkColorGetA(color) == SK_AlphaOPAQUE) { |
| srcPixels[y * source.width() + x] = SK_ColorGREEN; |
| } |
| } |
| } |
| SkBitmap bitmap; |
| bitmap.installPixels(pixmap); |
| canvas->drawBitmap(bitmap, 0, 0); |
| ## |
| |
| #SeeAlso SkAlpha SK_ColorTRANSPARENT SK_ColorBLACK |
| |
| #Subtopic Alpha_Constants ## |
| |
| #Subtopic Color_Constants |
| #In Constant |
| #Line # constants for Color ## |
| #Filter SK_Color |
| |
| #Code |
| #Populate |
| ## |
| |
| Color names are provided as conveniences, but are not otherwise special. |
| The values chosen for names may not be the same as values used by |
| SVG, HTML, CSS, or colors named by a platform. |
| |
| #Const SK_ColorTRANSPARENT 0x00000000 |
| #Line # transparent Color ## |
| Represents fully transparent SkColor. May be used to initialize a destination |
| containing a mask or a non-rectangular image. |
| ## |
| #Const SK_ColorBLACK 0xFF000000 |
| #Line # black Color ## |
| Represents fully opaque black. |
| ## |
| #Const SK_ColorDKGRAY 0xFF444444 |
| #Line # dark gray Color ## |
| Represents fully opaque dark gray. |
| Note that SVG_darkgray is equivalent to 0xFFA9A9A9. |
| ## |
| #Const SK_ColorGRAY 0xFF888888 |
| #Line # gray Color ## |
| Represents fully opaque gray. |
| Note that HTML_Gray is equivalent to 0xFF808080. |
| ## |
| #Const SK_ColorLTGRAY 0xFFCCCCCC |
| #Line # light gray Color ## |
| Represents fully opaque light gray. HTML_Silver is equivalent to 0xFFC0C0C0. |
| Note that SVG_lightgray is equivalent to 0xFFD3D3D3. |
| ## |
| #Const SK_ColorWHITE 0xFFFFFFFF |
| #Line # white Color ## |
| Represents fully opaque white. |
| ## |
| #Const SK_ColorRED 0xFFFF0000 |
| #Line # red Color ## |
| Represents fully opaque red. |
| ## |
| #Const SK_ColorGREEN 0xFF00FF00 |
| #Line # green Color ## |
| Represents fully opaque green. HTML_Lime is equivalent. |
| Note that HTML_Green is equivalent to 0xFF008000. |
| ## |
| #Const SK_ColorBLUE 0xFF0000FF |
| #Line # blue Color ## |
| Represents fully opaque blue. |
| ## |
| #Const SK_ColorYELLOW 0xFFFFFF00 |
| #Line # yellow Color ## |
| Represents fully opaque yellow. |
| ## |
| #Const SK_ColorCYAN 0xFF00FFFF |
| #Line # cyan Color ## |
| Represents fully opaque cyan. HTML_Aqua is equivalent. |
| ## |
| #Const SK_ColorMAGENTA 0xFFFF00FF |
| #Line # magenta Color ## |
| Represents fully opaque magenta. HTML_Fuchsia is equivalent. |
| ## |
| |
| #Example |
| ###$ |
| $Function |
| #define SKIA_COLOR_PAIR(name) "SK_Color" #name, SK_Color##name |
| $$ |
| void draw(SkCanvas* canvas) { |
| struct ColorCompare { |
| const char* fSVGName; |
| SkColor fSVGColor; |
| const char* fSkiaName; |
| SkColor fSkiaColor; |
| } colorCompare[] = { // see https://www.w3.org/TR/SVG/types.html#ColorKeywords |
| {"black", SkColorSetRGB( 0, 0, 0), SKIA_COLOR_PAIR(BLACK) }, |
| {"darkgray", SkColorSetRGB(169, 169, 169), SKIA_COLOR_PAIR(DKGRAY) }, |
| {"gray", SkColorSetRGB(128, 128, 128), SKIA_COLOR_PAIR(GRAY) }, |
| {"lightgray", SkColorSetRGB(211, 211, 211), SKIA_COLOR_PAIR(LTGRAY) }, |
| {"white", SkColorSetRGB(255, 255, 255), SKIA_COLOR_PAIR(WHITE) }, |
| {"red", SkColorSetRGB(255, 0, 0), SKIA_COLOR_PAIR(RED) }, |
| {"green", SkColorSetRGB( 0, 128, 0), SKIA_COLOR_PAIR(GREEN) }, |
| {"blue", SkColorSetRGB( 0, 0, 255), SKIA_COLOR_PAIR(BLUE) }, |
| {"yellow", SkColorSetRGB(255, 255, 0), SKIA_COLOR_PAIR(YELLOW) }, |
| {"aqua", SkColorSetRGB( 0, 255, 255), SKIA_COLOR_PAIR(CYAN) }, |
| {"fuchsia", SkColorSetRGB(255, 0, 255), SKIA_COLOR_PAIR(MAGENTA) }, |
| }; |
| SkPaint paint; |
| paint.setAntiAlias(true); |
| paint.setTextSize(14); |
| for (auto compare : colorCompare) { |
| paint.setStyle(SkPaint::kFill_Style); |
| paint.setColor(compare.fSVGColor); |
| canvas->drawRect({5, 5, 15, 15}, paint); |
| paint.setColor(SK_ColorBLACK); |
| canvas->drawString(compare.fSVGName, 20, 16, paint); |
| paint.setColor(compare.fSkiaColor); |
| canvas->drawRect({105, 5, 115, 15}, paint); |
| paint.setColor(SK_ColorBLACK); |
| canvas->drawString(compare.fSkiaName, 120, 16, paint); |
| paint.setStyle(SkPaint::kStroke_Style); |
| canvas->drawRect({5, 5, 15, 15}, paint); |
| canvas->drawRect({105, 5, 115, 15}, paint); |
| canvas->translate(0, 20); |
| } |
| } |
| $$$# |
| ## |
| |
| #Example |
| #Description |
| SK_ColorTRANSPARENT sets Color Alpha and components to zero. |
| ## |
| #Image 3 |
| std::vector<uint32_t> srcPixels; |
| constexpr int width = 256; |
| constexpr int height = 256; |
| srcPixels.resize(width * height); |
| SkImageInfo imageInfo = SkImageInfo::MakeN32Premul(width, height); |
| SkPixmap pixmap(imageInfo, &srcPixels.front(), imageInfo.minRowBytes()); |
| pixmap.erase(SK_ColorTRANSPARENT); |
| pixmap.erase(SK_ColorRED, { 24, 24, 192, 192 } ); |
| pixmap.erase(SK_ColorTRANSPARENT, { 48, 48, 168, 168 } ); |
| SkBitmap bitmap; |
| bitmap.installPixels(pixmap); |
| canvas->drawBitmap(bitmap, 0, 0); |
| canvas->drawBitmap(bitmap, 48, 48); |
| ## |
| |
| #Example |
| #Description |
| SK_ColorBLACK sets Color Alpha to one and components to zero. |
| ## |
| std::vector<uint32_t> srcPixels; |
| constexpr int width = 256; |
| constexpr int height = 256; |
| srcPixels.resize(width * height); |
| SkImageInfo imageInfo = SkImageInfo::MakeN32Premul(width, height); |
| SkPixmap pixmap(imageInfo, &srcPixels.front(), imageInfo.minRowBytes()); |
| pixmap.erase(SK_ColorTRANSPARENT); |
| pixmap.erase(SK_ColorRED, { 24, 24, 192, 192 } ); |
| pixmap.erase(SK_ColorBLACK, { 48, 48, 168, 168 } ); |
| SkBitmap bitmap; |
| bitmap.installPixels(pixmap); |
| canvas->drawBitmap(bitmap, 0, 0); |
| canvas->drawBitmap(bitmap, 48, 48); |
| ## |
| |
| #Example |
| #Description |
| SK_ColorWHITE sets Color Alpha and components to one. |
| ## |
| std::vector<uint32_t> srcPixels; |
| constexpr int width = 256; |
| constexpr int height = 256; |
| srcPixels.resize(width * height); |
| SkImageInfo imageInfo = SkImageInfo::MakeN32Premul(width, height); |
| SkPixmap pixmap(imageInfo, &srcPixels.front(), imageInfo.minRowBytes()); |
| pixmap.erase(SK_ColorTRANSPARENT); |
| pixmap.erase(SK_ColorRED, { 24, 24, 192, 192 } ); |
| pixmap.erase(SK_ColorWHITE, { 48, 48, 168, 168 } ); |
| SkBitmap bitmap; |
| bitmap.installPixels(pixmap); |
| canvas->drawBitmap(bitmap, 0, 0); |
| canvas->drawBitmap(bitmap, 48, 48); |
| ## |
| |
| #SeeAlso SK_ColorTRANSPARENT SkCanvas::clear SK_AlphaOPAQUE |
| |
| #Subtopic Color_Constants ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Subtopic HSV |
| #Line # hue saturation value color representation ## |
| |
| #Subtopic Hue |
| Hue represents an angle, in degrees, on a color wheel. Hue has a positive value |
| modulo 360, where zero degrees is red. |
| ## |
| |
| #Subtopic Saturation |
| Saturation represents the intensity of the color. Saturation varies from zero, |
| with no Hue contribution; to one, with full Hue contribution. |
| ## |
| |
| #Subtopic Value |
| Value represents the lightness of the color. Value varies from zero, black; to |
| one, full brightness. |
| ## |
| |
| #Method void SkRGBToHSV(U8CPU red, U8CPU green, U8CPU blue, SkScalar hsv[3]) |
| #In Functions |
| #Line # converts RGB to HSV ## |
| |
| Converts RGB to its HSV components. |
| hsv[0] contains HSV_Hue, a value from zero to less than 360. |
| hsv[1] contains HSV_Saturation, a value from zero to one. |
| hsv[2] contains HSV_Value, a value from zero to one. |
| |
| #Param red red component value from zero to 255 ## |
| #Param green green component value from zero to 255 ## |
| #Param blue blue component value from zero to 255 ## |
| #Param hsv three element array which holds the resulting HSV components |
| ## |
| |
| #Example |
| #Image 3 |
| canvas->drawBitmap(source, 0, 0); |
| SkPaint bgPaint; |
| bgPaint.setColor(0xafffffff); |
| canvas->drawRect({20, 30, 110, 90}, bgPaint); |
| SkScalar hsv[3]; |
| SkColor c = source.getColor(226, 128); |
| SkRGBToHSV(SkColorGetR(c), SkColorGetG(c), SkColorGetB(c), hsv); |
| canvas->drawString(("h: " + std::to_string(hsv[0]).substr(0, 6)).c_str(), 27, 45, SkPaint()); |
| canvas->drawString(("s: " + std::to_string(hsv[1]).substr(0, 6)).c_str(), 27, 65, SkPaint()); |
| canvas->drawString(("v: " + std::to_string(hsv[2]).substr(0, 6)).c_str(), 27, 85, SkPaint()); |
| canvas->drawLine(110, 90, 226, 128, SkPaint()); |
| ## |
| |
| #SeeAlso SkColorToHSV SkHSVToColor |
| |
| #Method ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Method static void SkColorToHSV(SkColor color, SkScalar hsv[3]) |
| #In Functions |
| #Line # converts RGB to HSV ## |
| |
| Converts ARGB to its HSV components. Alpha in ARGB is ignored. |
| hsv[0] contains HSV_Hue, and is assigned a value from zero to less than 360. |
| hsv[1] contains HSV_Saturation, a value from zero to one. |
| hsv[2] contains HSV_Value, a value from zero to one. |
| |
| #Param color ARGB color to convert |
| ## |
| #Param hsv three element array which holds the resulting HSV components |
| ## |
| |
| #Example |
| #Image 3 |
| canvas->drawBitmap(source, 0, 0); |
| for (int y = 0; y < 256; ++y) { |
| for (int x = 0; x < 256; ++x) { |
| SkScalar hsv[3]; |
| SkColorToHSV(source.getColor(x, y), hsv); |
| hsv[1] = 1 - hsv[1]; |
| SkPaint paint; |
| paint.setColor(SkHSVToColor(hsv)); |
| canvas->drawRect(SkRect::MakeXYWH(x, y, 1, 1), paint); |
| } |
| } |
| ## |
| |
| #SeeAlso SkRGBToHSV SkHSVToColor |
| |
| #Method ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Method SkColor SkHSVToColor(U8CPU alpha, const SkScalar hsv[3]) |
| #In Functions |
| #Line # converts HSV with Alpha to RGB ## |
| |
| Converts HSV components to an ARGB color. Alpha is passed through unchanged. |
| hsv[0] represents HSV_Hue, an angle from zero to less than 360. |
| hsv[1] represents HSV_Saturation, and varies from zero to one. |
| hsv[2] represents HSV_Value, and varies from zero to one. |
| |
| Out of range hsv values are pinned. |
| |
| #Param alpha Alpha component of the returned ARGB color |
| ## |
| #Param hsv three element array which holds the input HSV components |
| ## |
| |
| #Return ARGB equivalent to HSV |
| ## |
| |
| #Example |
| #Image 3 |
| canvas->drawBitmap(source, 0, 0); |
| for (int y = 0; y < 256; ++y) { |
| for (int x = 0; x < 256; ++x) { |
| SkColor color = source.getColor(x, y); |
| SkScalar hsv[3]; |
| SkColorToHSV(color, hsv); |
| hsv[0] = hsv[0] + 90 >= 360 ? hsv[0] - 270 : hsv[0] + 90; |
| SkPaint paint; |
| paint.setColor(SkHSVToColor(x + y, hsv)); |
| canvas->drawRect(SkRect::MakeXYWH(x, y, 1, 1), paint); |
| } |
| } |
| ## |
| |
| #SeeAlso SkColorToHSV SkRGBToHSV |
| |
| #Method ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Method static SkColor SkHSVToColor(const SkScalar hsv[3]) |
| #In Functions |
| #Line # converts HSV to RGB ## |
| |
| Converts HSV components to an ARGB color. Alpha is set to 255. |
| hsv[0] represents HSV_Hue, an angle from zero to less than 360. |
| hsv[1] represents HSV_Saturation, and varies from zero to one. |
| hsv[2] represents HSV_Value, and varies from zero to one. |
| |
| Out of range hsv values are pinned. |
| |
| #Param hsv three element array which holds the input HSV components |
| ## |
| |
| #Return RGB equivalent to HSV |
| ## |
| |
| #Example |
| #Image 3 |
| canvas->drawBitmap(source, 0, 0); |
| for (int y = 0; y < 256; ++y) { |
| for (int x = 0; x < 256; ++x) { |
| SkColor color = source.getColor(x, y); |
| SkScalar hsv[3]; |
| SkColorToHSV(color, hsv); |
| hsv[0] = hsv[0] + 90 >= 360 ? hsv[0] - 270 : hsv[0] + 90; |
| SkPaint paint; |
| paint.setColor(SkHSVToColor(hsv)); |
| canvas->drawRect(SkRect::MakeXYWH(x, y, 1, 1), paint); |
| } |
| } |
| ## |
| |
| #SeeAlso SkColorToHSV SkRGBToHSV |
| |
| #Method ## |
| |
| #Subtopic HSV ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Subtopic PM_Color |
| #Line # color components premultiplied by Alpha ## |
| |
| #Typedef uint32_t SkPMColor |
| #Line # defines Premultiplied Color as 32 bits ## |
| |
| #Code |
| #Populate |
| ## |
| |
| 32-bit ARGB color value, Premultiplied. The byte order for this value is |
| configuration dependent, matching the format of kBGRA_8888_SkColorType bitmaps. |
| This is different from SkColor, which is Unpremultiplied, and is always in the |
| same byte order. |
| |
| #Typedef ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Method SkPMColor SkPreMultiplyARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) |
| #In Functions |
| #Line # converts Unpremultiplied ARGB to Premultiplied PM_Color ## |
| |
| Returns a SkPMColor value from Unpremultiplied 8-bit component values. |
| |
| #Param a amount of Alpha, from fully transparent (0) to fully opaque (255) ## |
| #Param r amount of red, from no red (0) to full red (255) ## |
| #Param g amount of green, from no green (0) to full green (255) ## |
| #Param b amount of blue, from no blue (0) to full blue (255) ## |
| |
| #Return Premultiplied Color ## |
| |
| #Example |
| #Height 128 |
| #Width 300 |
| SkPMColor premultiplied = SkPreMultiplyARGB(160, 128, 160, 192); |
| canvas->drawString("Unpremultiplied:", 20, 20, SkPaint()); |
| canvas->drawString("alpha=160 red=128 green=160 blue=192", 20, 40, SkPaint()); |
| canvas->drawString("Premultiplied:", 20, 80, SkPaint()); |
| std::string str = "alpha=" + std::to_string(SkColorGetA(premultiplied)); |
| str += " red=" + std::to_string(SkColorGetR(premultiplied)); |
| str += " green=" + std::to_string(SkColorGetG(premultiplied)); |
| str += " blue=" + std::to_string(SkColorGetB(premultiplied)); |
| canvas->drawString(str.c_str(), 20, 100, SkPaint()); |
| ## |
| |
| #SeeAlso SkPreMultiplyColor |
| |
| #Method ## |
| |
| # ------------------------------------------------------------------------------ |
| |
| #Method SkPMColor SkPreMultiplyColor(SkColor c) |
| #In Functions |
| #Line # converts Unpremultiplied Color to Premultiplied PM_Color ## |
| |
| Returns PM_Color closest to Color c. Multiplies c RGB components by the c Alpha, |
| and arranges the bytes to match the format of kN32_SkColorType. |
| |
| #Param c Unpremultiplied ARGB Color ## |
| |
| #Return Premultiplied Color ## |
| |
| #Example |
| #Height 128 |
| #Width 300 |
| SkColor unpremultiplied = SkColorSetARGB(160, 128, 160, 192); |
| SkPMColor premultiplied = SkPreMultiplyColor(unpremultiplied); |
| canvas->drawString("Unpremultiplied:", 20, 20, SkPaint()); |
| std::string str = "alpha=" + std::to_string(SkColorGetA(unpremultiplied)); |
| str += " red=" + std::to_string(SkColorGetR(unpremultiplied)); |
| str += " green=" + std::to_string(SkColorGetG(unpremultiplied)); |
| str += " blue=" + std::to_string(SkColorGetB(unpremultiplied)); |
| canvas->drawString(str.c_str(), 20, 40, SkPaint()); |
| canvas->drawString("Premultiplied:", 20, 80, SkPaint()); |
| str = "alpha=" + std::to_string(SkColorGetA(premultiplied)); |
| str += " red=" + std::to_string(SkColorGetR(premultiplied)); |
| str += " green=" + std::to_string(SkColorGetG(premultiplied)); |
| str += " blue=" + std::to_string(SkColorGetB(premultiplied)); |
| canvas->drawString(str.c_str(), 20, 100, SkPaint()); |
| ## |
| |
| #SeeAlso SkPreMultiplyARGB |
| |
| #Method ## |
| |
| #Subtopic PM_Color ## |
| |
| #Topic Color ## |