Skia
2D Graphics Library
SkBlendMode.h File Reference
Include dependency graph for SkBlendMode.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Enumerations

enum  SkBlendMode {
  SkBlendMode::kClear, SkBlendMode::kSrc, SkBlendMode::kDst, SkBlendMode::kSrcOver,
  SkBlendMode::kDstOver, SkBlendMode::kSrcIn, SkBlendMode::kDstIn, SkBlendMode::kSrcOut,
  SkBlendMode::kDstOut, SkBlendMode::kSrcATop, SkBlendMode::kDstATop, SkBlendMode::kXor,
  SkBlendMode::kPlus, SkBlendMode::kModulate, SkBlendMode::kScreen, SkBlendMode::kOverlay,
  SkBlendMode::kDarken, SkBlendMode::kLighten, SkBlendMode::kColorDodge, SkBlendMode::kColorBurn,
  SkBlendMode::kHardLight, SkBlendMode::kSoftLight, SkBlendMode::kDifference, SkBlendMode::kExclusion,
  SkBlendMode::kMultiply, SkBlendMode::kHue, SkBlendMode::kSaturation, SkBlendMode::kColor,
  SkBlendMode::kLuminosity, SkBlendMode::kLastCoeffMode = kScreen, SkBlendMode::kLastSeparableMode = kMultiply, SkBlendMode::kLastMode = kLuminosity
}
 Blends are operators that take in two colors (source, destination) and return a new color. More...
 
enum  SkBlendModeCoeff {
  SkBlendModeCoeff::kZero, SkBlendModeCoeff::kOne, SkBlendModeCoeff::kSC, SkBlendModeCoeff::kISC,
  SkBlendModeCoeff::kDC, SkBlendModeCoeff::kIDC, SkBlendModeCoeff::kSA, SkBlendModeCoeff::kISA,
  SkBlendModeCoeff::kDA, SkBlendModeCoeff::kIDA, SkBlendModeCoeff::kCoeffCount
}
 For Porter-Duff SkBlendModes (those <= kLastCoeffMode), these coefficients describe the blend equation used. More...
 

Functions

SK_API bool SkBlendMode_AsCoeff (SkBlendMode mode, SkBlendModeCoeff *src, SkBlendModeCoeff *dst)
 Returns true if 'mode' is a coefficient-based blend mode (<= kLastCoeffMode). More...
 
SK_API const char * SkBlendMode_Name (SkBlendMode blendMode)
 Returns name of blendMode as null-terminated C string. More...
 

Enumeration Type Documentation

◆ SkBlendMode

enum SkBlendMode
strong

Blends are operators that take in two colors (source, destination) and return a new color.

Many of these operate the same on all 4 components: red, green, blue, alpha. For these, we just document what happens to one component, rather than naming each one separately.

Different SkColorTypes have different representations for color components: 8-bit: 0..255 6-bit: 0..63 5-bit: 0..31 4-bit: 0..15 floats: 0...1

The documentation is expressed as if the component values are always 0..1 (floats).

For brevity, the documentation uses the following abbreviations s : source d : destination sa : source alpha da : destination alpha

Results are appreviated r : if all 4 components are computed in the same manner ra : result alpha component rc : result "color": red, green, blue components

Enumerator
kClear 

r = 0

kSrc 

r = s

kDst 

r = d

kSrcOver 

r = s + (1-sa)*d

kDstOver 

r = d + (1-da)*s

kSrcIn 

r = s * da

kDstIn 

r = d * sa

kSrcOut 

r = s * (1-da)

kDstOut 

r = d * (1-sa)

kSrcATop 

r = s*da + d*(1-sa)

kDstATop 

r = d*sa + s*(1-da)

kXor 

r = s*(1-da) + d*(1-sa)

kPlus 

r = min(s + d, 1)

kModulate 

r = s*d

kScreen 

r = s + d - s*d

kOverlay 

multiply or screen, depending on destination

kDarken 

rc = s + d - max(s*da, d*sa), ra = kSrcOver

kLighten 

rc = s + d - min(s*da, d*sa), ra = kSrcOver

kColorDodge 

brighten destination to reflect source

kColorBurn 

darken destination to reflect source

kHardLight 

multiply or screen, depending on source

kSoftLight 

lighten or darken, depending on source

kDifference 

rc = s + d - 2*(min(s*da, d*sa)), ra = kSrcOver

kExclusion 

rc = s + d - two(s*d), ra = kSrcOver

kMultiply 

r = s*(1-da) + d*(1-sa) + s*d

kHue 

hue of source with saturation and luminosity of destination

kSaturation 

saturation of source with hue and luminosity of destination

kColor 

hue and saturation of source with luminosity of destination

kLuminosity 

luminosity of source with hue and saturation of destination

kLastCoeffMode 

last porter duff blend mode

kLastSeparableMode 

last blend mode operating separately on components

kLastMode 

last valid value

◆ SkBlendModeCoeff

enum SkBlendModeCoeff
strong

For Porter-Duff SkBlendModes (those <= kLastCoeffMode), these coefficients describe the blend equation used.

Coefficient-based blend modes specify an equation: ('dstCoeff' * dst + 'srcCoeff' * src), where the coefficient values are constants, functions of the src or dst alpha, or functions of the src or dst color.

Enumerator
kZero 
kOne 

0

kSC 

1

kISC 

src color

kDC 

inverse src color (i.e.

1 - sc)

kIDC 

dst color

kSA 

inverse dst color (i.e.

1 - dc)

kISA 

src alpha

kDA 

inverse src alpha (i.e.

1 - sa)

kIDA 

dst alpha

kCoeffCount 

inverse dst alpha (i.e.

1 - da)

Function Documentation

◆ SkBlendMode_AsCoeff()

SK_API bool SkBlendMode_AsCoeff ( SkBlendMode  mode,
SkBlendModeCoeff src,
SkBlendModeCoeff dst 
)

Returns true if 'mode' is a coefficient-based blend mode (<= kLastCoeffMode).

If true is returned, the mode's src and dst coefficient functions are set in 'src' and 'dst'.

◆ SkBlendMode_Name()

SK_API const char* SkBlendMode_Name ( SkBlendMode  blendMode)

Returns name of blendMode as null-terminated C string.

Returns
C string