7bae65d007
TBR=brianosman@google.com Docs-Preview: https://skia.org/?cl=163121 Bug: skia: Change-Id: I3191da39b9b9b642d2a7160ac0e274d56869bdf4 Reviewed-on: https://skia-review.googlesource.com/c/163121 Commit-Queue: Cary Clark <caryclark@skia.org> Auto-Submit: Cary Clark <caryclark@skia.org> Reviewed-by: Cary Clark <caryclark@skia.org>
480 lines
12 KiB
Plaintext
480 lines
12 KiB
Plaintext
#Topic Color4f
|
|
#Alias Color4f_Reference ##
|
|
#Substitute SkColor4f
|
|
|
|
#Struct SkPM4f
|
|
##
|
|
|
|
#Struct SkRGBA4f
|
|
|
|
#Code
|
|
#Populate
|
|
##
|
|
|
|
Each component is stored as a 32-bit single precision floating point float value.
|
|
All values are allowed, but only the range from zero to one is meaningful.
|
|
|
|
Components are independent of the others if defined with kUnpremul_SkAlphaType;
|
|
fA Alpha is may be greater or smaller than fG green, fB blue, or fR red.
|
|
SkColor4f is shorthand for Unpremultiplied SkRGBA4f.
|
|
|
|
Components are connnected if defined with kPremul_SkAlphaType;
|
|
fA Alpha is equal to or larger than fG green, fB blue, and fR red. The values
|
|
stored in fG, fB, and fR combine the color component with the Alpha component.
|
|
|
|
Values smaller than zero or larger than one are allowed. Values out of range
|
|
may be used with Blend_Mode so that the final component is in range.
|
|
|
|
#Member float fR
|
|
#Line # red component ##
|
|
Single precision float for red ranges from no red (0.0) to full red (1.0).
|
|
##
|
|
|
|
#Member float fG
|
|
#Line # green component ##
|
|
Single precision float for green ranges from no green (0.0) to full green (1.0).
|
|
##
|
|
|
|
#Member float fB
|
|
#Line # blue component ##
|
|
Single precision float for blue ranges from no blue (0.0) to full blue (1.0).
|
|
##
|
|
|
|
#Member float fA
|
|
#Line # alpha component ##
|
|
Single precision float for Alpha ranges from no Alpha (0.0) to full Alpha (1.0).
|
|
##
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method bool operator==(const SkRGBA4f& other)_const
|
|
#Line # compares SkRGBA4f for equality ##
|
|
|
|
Compares SkRGBA4f with other, and returns true if all components are equivalent.
|
|
|
|
#Param other SkRGBA4f to compare ##
|
|
|
|
#Return true if SkRGBA4f equals other ##
|
|
|
|
#Example
|
|
SkColor4f colorRed = { 1, 0, 0, 1 };
|
|
SkColor4f colorNamedRed = SkColor4f::FromColor(SK_ColorRED);
|
|
SkDebugf("colorRed %c= colorNamedRed", colorRed == colorNamedRed ? '=' : '!');
|
|
#StdOut
|
|
colorRed == colorNamedRed
|
|
##
|
|
##
|
|
|
|
#SeeAlso operator!=(const SkRGBA4f& other)_const
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method bool operator!=(const SkRGBA4f& other)_const
|
|
#Line # compares SkRGBA4f for inequality ##
|
|
|
|
Compares SkRGBA4f with other, and returns true if all components are not
|
|
equivalent.
|
|
|
|
#Param other SkRGBA4f to compare ##
|
|
|
|
#Return true if SkRGBA4f is not equal to other ##
|
|
|
|
#Example
|
|
SkColor4f colorGray = { .5, .5, .5, 1 };
|
|
SkColor4f colorNamedGray = SkColor4f::FromColor(SK_ColorGRAY);
|
|
SkDebugf("colorGray %c= colorNamedGray ", colorGray != colorNamedGray ? '!' : '=');
|
|
#StdOut
|
|
colorGray != colorNamedGray
|
|
##
|
|
##
|
|
|
|
#SeeAlso operator==(const SkRGBA4f& other)_const
|
|
|
|
#Method ##
|
|
|
|
#Method SkRGBA4f operator*(float scale)_const
|
|
#Line # multiplies components by scale ##
|
|
|
|
Multiplies each component by scale. Does not pin the result.
|
|
|
|
#Param scale component multiplier ##
|
|
|
|
#Return scaled color ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso SkBlendMode::kMultiply
|
|
|
|
#Method ##
|
|
|
|
#Method SkRGBA4f operator*(const SkRGBA4f& scale)_const
|
|
|
|
Multiplies each component by scale component. Does not pin the result.
|
|
|
|
#Param scale SkRGBA4f component multipliers ##
|
|
|
|
#Return scaled color ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso SkBlendMode::kMultiply
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Subtopic Property_Functions
|
|
#Line # member values ##
|
|
#Subtopic Property_Functions ##
|
|
|
|
#Method const float* vec() const
|
|
#In Property_Functions
|
|
#Line # returns array of components ##
|
|
|
|
Returns SkRGBA4f components as a read-only array.
|
|
|
|
#Return components as read-only array ##
|
|
|
|
#Example
|
|
SkColor4f color = SkColor4f::FromColor(0x884488CC);
|
|
SkDebugf("red=%g green=%g blue=%g alpha=%g\n", color.fR, color.fG, color.fB, color.fA);
|
|
const float* array = color.vec();
|
|
SkDebugf("[0]=%g [1]=%g [2]=%g [3]=%g\n", array[0], array[1], array[2], array[3]);
|
|
#StdOut
|
|
red=0.266667 green=0.533333 blue=0.8 alpha=0.533333
|
|
[0]=0.266667 [1]=0.533333 [2]=0.8 [3]=0.533333
|
|
##
|
|
##
|
|
|
|
#SeeAlso SkColor4f
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method float* vec()
|
|
#In Property_Functions
|
|
#Line # returns array of components ##
|
|
|
|
Returns SkRGBA4f components as a writable array.
|
|
|
|
#Return components as writable array ##
|
|
|
|
#Example
|
|
SkColor4f color = SkColor4f::FromColor(0x884488CC);
|
|
SkDebugf("red=%g green=%g blue=%g alpha=%g\n", color.fR, color.fG, color.fB, color.fA);
|
|
float* array = color.vec();
|
|
array[3] = 1;
|
|
SkDebugf("[0]=%g [1]=%g [2]=%g [3]=%g\n", array[0], array[1], array[2], array[3]);
|
|
#StdOut
|
|
red=0.266667 green=0.533333 blue=0.8 alpha=0.533333
|
|
[0]=0.266667 [1]=0.533333 [2]=0.8 [3]=1
|
|
##
|
|
##
|
|
|
|
#SeeAlso SkColor4f
|
|
|
|
#Method ##
|
|
|
|
#Method float operator[](int index)_const
|
|
#Line # returns component by index ##
|
|
|
|
Returns SkRGBA4f component by index, zero through three. index out of range
|
|
triggers an assert in debug builds.
|
|
|
|
#Param index component, zero through three ##
|
|
#Return component by index ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso vec
|
|
|
|
#Method ##
|
|
|
|
#Method float& operator[](int index)
|
|
#Line # returns writable component reference ##
|
|
|
|
Returns writable component reference by index, zero through three. index out of range
|
|
triggers an assert in debug builds.
|
|
|
|
#Param index component, zero through three ##
|
|
#Return writable component reference by index ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso vec
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Subtopic Utility_Functions
|
|
#Line # less common functions ##
|
|
#Subtopic Utility_Functions ##
|
|
|
|
#Method bool isOpaque() const
|
|
#In Utility_Functions
|
|
#Line # returns if Alpha component is at maximum ##
|
|
|
|
Returns true if Alpha component is one. Color has no transparency regardless of
|
|
whether color is Premultiplied or Unpremultiplied. Triggers a debugging assert
|
|
if Alpha not valid.
|
|
|
|
#Return true if Alpha is one ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso vec SkColorGetA
|
|
|
|
##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method static SkRGBA4f Pin(float r, float g, float b, float a)
|
|
#In Utility_Functions
|
|
#Line # sets components to valid range ##
|
|
|
|
Constructs and returns SkRGBA4f with each component pinned from zero to one.
|
|
|
|
#Param r red component ##
|
|
#Param g green component ##
|
|
#Param b blue component ##
|
|
#Param a Alpha component ##
|
|
|
|
#Return Color4f with valid components ##
|
|
|
|
#Example
|
|
#Height 40
|
|
uint32_t storage[8];
|
|
SkImageInfo info = SkImageInfo::MakeN32Premul(8, 1);
|
|
SkPixmap pixmap(info, storage, info.minRowBytes());
|
|
pixmap.erase(SK_ColorWHITE);
|
|
SkIRect bounds = {0, 0, 1, 1};
|
|
SkColor4f colors[] = { SkColor4f::Pin(1.5, 0.45f, 0.0, 1),
|
|
SkColor4f::Pin(1, 0.45f, -0.25, 1),
|
|
{1.5, 0.45f, 0.0, 1},
|
|
{1, 0.45f, -0.25, 1},
|
|
};
|
|
for (auto color4f : colors) {
|
|
pixmap.erase(color4f, &bounds);
|
|
bounds.offset(2, 0);
|
|
}
|
|
SkBitmap bitmap;
|
|
canvas->scale(20, 20);
|
|
bitmap.installPixels(pixmap);
|
|
canvas->drawBitmap(bitmap, 0, 0);
|
|
##
|
|
|
|
#SeeAlso pin() FromColor
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method SkRGBA4f pin() const
|
|
#In Utility_Functions
|
|
#Line # sets components to valid range ##
|
|
|
|
Returns SkRGBA4f with all components in the range from zero to one.
|
|
|
|
#Return SkRGBA4f with valid components ##
|
|
|
|
#Example
|
|
#Height 40
|
|
uint32_t storage[8];
|
|
SkImageInfo info = SkImageInfo::MakeN32Premul(8, 1);
|
|
SkPixmap pixmap(info, storage, info.minRowBytes());
|
|
pixmap.erase(SK_ColorWHITE);
|
|
SkIRect bounds = {0, 0, 1, 1};
|
|
SkColor4f colors[] = { {1.5, 0.45f, 0.0, 1},
|
|
{1, 0.45f, -0.25, 1},
|
|
};
|
|
for (auto color4f : colors) {
|
|
pixmap.erase(color4f, &bounds);
|
|
bounds.offset(2, 0);
|
|
pixmap.erase(color4f.pin(), &bounds);
|
|
bounds.offset(2, 0);
|
|
}
|
|
SkBitmap bitmap;
|
|
canvas->scale(20, 20);
|
|
bitmap.installPixels(pixmap);
|
|
canvas->drawBitmap(bitmap, 0, 0);
|
|
##
|
|
|
|
#SeeAlso Pin
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method static SkRGBA4f FromColor(SkColor)
|
|
#In Utility_Functions
|
|
#Line # sets components from Color ##
|
|
|
|
Converts to closest SkRGBA4f.
|
|
|
|
#Param SkColor Color with Alpha, red, blue, and green components ##
|
|
|
|
#Return SkRGBA4f equivalent ##
|
|
|
|
#Example
|
|
uint8_t red = 77, green = 101, blue = 153, alpha = 43;
|
|
SkColor argb = SkColorSetARGB(alpha, red, green, blue);
|
|
SkColor4f color4f = SkColor4f::FromColor(argb);
|
|
SkDebugf("red=%g green=%g blue=%g alpha=%g\n", color4f.fR, color4f.fG, color4f.fB, color4f.fA);
|
|
SkColor fromColor4f = color4f.toSkColor();
|
|
SkDebugf("red=%d green=%d blue=%d alpha=%d\n", SkColorGetR(fromColor4f),
|
|
SkColorGetG(fromColor4f), SkColorGetB(fromColor4f), SkColorGetA(fromColor4f));
|
|
#StdOut
|
|
red=0.301961 green=0.396078 blue=0.6 alpha=0.168627
|
|
red=77 green=101 blue=153 alpha=43
|
|
##
|
|
##
|
|
|
|
#SeeAlso toSkColor
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method SkColor toSkColor() const
|
|
#In Utility_Functions
|
|
#Line # returns closest Color ##
|
|
|
|
Converts to closest SkColor.
|
|
|
|
#Return closest Color ##
|
|
|
|
#Example
|
|
float red = 0.07, green = 0.13, blue = 0.32, alpha = 0.17;
|
|
SkColor4f color4f = { red, green, blue, alpha };
|
|
SkColor argb = color4f.toSkColor();
|
|
SkDebugf("red=%d green=%d blue=%d alpha=%d\n", SkColorGetR(argb),
|
|
SkColorGetG(argb), SkColorGetB(argb), SkColorGetA(argb));
|
|
SkColor4f fromSkColor = SkColor4f::FromColor(argb);
|
|
SkDebugf("red=%g green=%g blue=%g alpha=%g\n", fromSkColor.fR, fromSkColor.fG,
|
|
fromSkColor.fB, fromSkColor.fA);
|
|
#StdOut
|
|
red=18 green=33 blue=82 alpha=43
|
|
red=0.0705882 green=0.129412 blue=0.321569 alpha=0.168627
|
|
##
|
|
##
|
|
|
|
#SeeAlso FromColor
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method static SkRGBA4f FromPMColor(SkPMColor)
|
|
#In Utility_Functions
|
|
#Line # converts from Premultiplied Color ##
|
|
|
|
Converts from Premultiplied integer components to Unpremultiplied float
|
|
components.
|
|
|
|
#Param SkPMColor Premultiplied color ##
|
|
|
|
#Return Unpremultiplied color ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso FromColor
|
|
|
|
#Method ##
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#Method SkRGBA4f<kPremul_SkAlphaType> premul() const
|
|
#In Utility
|
|
#Line # returns Premultiplied color ##
|
|
|
|
Returns SkColor4f with all components premultiplied by Alpha.
|
|
|
|
#Return Premultiplied color ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso unpremul
|
|
|
|
#Method ##
|
|
|
|
#Method SkRGBA4f<kUnpremul_SkAlphaType> unpremul() const
|
|
#In Utility
|
|
#Line # returns Unpremultiplied color ##
|
|
|
|
Returns SkRGBA4f with all components independent of Alpha.
|
|
|
|
#Return Unpremultiplied color ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#SeeAlso premul
|
|
|
|
#Method ##
|
|
|
|
#Method uint32_t toBytes_RGBA() const
|
|
#In Utility
|
|
#Line # returns kRGBA_8888_SkColorType color ##
|
|
|
|
Produces bytes in RGBA order. Component values are not affected by color Alpha.
|
|
|
|
#Return color ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#Method ##
|
|
|
|
#Method static SkRGBA4f FromBytes_RGBA(uint32_t color)
|
|
#In Utility
|
|
#Line # sets kRGBA_8888_SkColorType color ##
|
|
|
|
Returns from color kRGBA_8888_SkColorType order. Component values are
|
|
not affected by color Alpha.
|
|
|
|
#Param color Premultiplied or Unpremultiplied ##
|
|
#Return color ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#Method ##
|
|
|
|
#Method SkRGBA4f makeOpaque() const
|
|
#In Utility
|
|
#Line # returns color without transparency ##
|
|
|
|
Returns color with Alpha set to one.
|
|
|
|
#Return color ##
|
|
|
|
#NoExample
|
|
##
|
|
|
|
#Method ##
|
|
|
|
#Struct ##
|
|
|
|
#Typedef SkRGBA4f SkColor4f
|
|
#Line # defines Unpremultiplied Color using floats ##
|
|
|
|
#Code
|
|
using SkColor4f = SkRGBA4f<kUnpremul_SkAlphaType>;
|
|
##
|
|
|
|
##
|
|
|
|
#Topic Color4f ##
|