skia2/site/user/api/SkBlendMode_Reference.md
Cary Clark 777eede780 fix bookmaker
Remove references to old SkPaint::Hinting.

Also fix bug recently introduced that made
unlinkable words use the last link found.

TBR=reed@google.com

Docs-Preview: https://skia.org/?cl=170266
Bug: skia:
Change-Id: I8b83bcb479bd3f79699a1c74818a817190fd42a5
Reviewed-on: https://skia-review.googlesource.com/c/170266
Commit-Queue: Cary Clark <caryclark@skia.org>
Auto-Submit: Cary Clark <caryclark@skia.org>
Reviewed-by: Cary Clark <caryclark@skia.org>
2018-11-09 21:33:54 +00:00

47 KiB

SkBlendMode Reference

enum class SkBlendMode {
    kClear,
    kSrc,
    kDst,
    kSrcOver,
    kDstOver,
    kSrcIn,
    kDstIn,
    kSrcOut,
    kDstOut,
    kSrcATop,
    kDstATop,
    kXor,
    kPlus,
    kModulate,
    kScreen,
    kLastCoeffMode = kScreen,
    kOverlay,
    kDarken,
    kLighten,
    kColorDodge,
    kColorBurn,
    kHardLight,
    kSoftLight,
    kDifference,
    kExclusion,
    kMultiply,
    kLastSeparableMode = kMultiply,
    kHue,
    kSaturation,
    kColor,
    kLuminosity,
    kLastMode = kLuminosity,
};

const char* SkBlendMode_Name(SkBlendMode blendMode);


Constants

Const Value Details Description
SkBlendMode::kClear 0 Clear  Replaces destination with Alpha and Color components set to zero; a fully transparent pixel.
SkBlendMode::kSrc 1 Src  Replaces destination with source. Destination alpha and color component values are ignored.
SkBlendMode::kDst 2 Dst  Preserves destination, ignoring source. Drawing with Paint set to kDst has no effect.
SkBlendMode::kSrcOver 3 Src Over  Replaces destination with source blended with destination. If source is opaque, replaces destination with source. Used as the default Blend_Mode for SkPaint.
SkBlendMode::kDstOver 4 Dst Over  Replaces destination with destination blended with source. If destination is opaque, has no effect.
SkBlendMode::kSrcIn 5 Src In  Replaces destination with source using destination opacity.
SkBlendMode::kDstIn 6 Dst In  Scales destination opacity by source opacity.
SkBlendMode::kSrcOut 7 Src Out  Replaces destination with source using the inverse of destination opacity, drawing source fully where destination opacity is zero.
SkBlendMode::kDstOut 8 Dst Out  Replaces destination opacity with inverse of source opacity. If source is transparent, has no effect.
SkBlendMode::kSrcATop 9 Src Atop  Blends destination with source using read destination opacity.
SkBlendMode::kDstATop 10 Dst Atop  Blends destination with source using source opacity.
SkBlendMode::kXor 11 Xor  Blends destination by exchanging transparency of the source and destination.
SkBlendMode::kPlus 12 Plus  Replaces destination with source and destination added together.
SkBlendMode::kModulate 13 Modulate  Replaces destination with source and destination multiplied together.
SkBlendMode::kScreen 14 Screen  Replaces destination with inverted source and destination multiplied together.
SkBlendMode::kLastCoeffMode 14 last Porter_Duff blend mode
SkBlendMode::kOverlay 15 Overlay  Replaces destination with multiply or screen, depending on destination.
SkBlendMode::kDarken 16 Darken  Replaces destination with darker of source and destination.
SkBlendMode::kLighten 17 Lighten  Replaces destination with lighter of source and destination.
SkBlendMode::kColorDodge 18 Color Dodge  Makes destination brighter to reflect source.
SkBlendMode::kColorBurn 19 Color Burn  Makes destination darker to reflect source.
SkBlendMode::kHardLight 20 Hard Light  Makes destination lighter or darker, depending on source.
SkBlendMode::kSoftLight 21 Soft Light  Makes destination lighter or darker, depending on source.
SkBlendMode::kDifference 22 Difference  Subtracts darker from lighter with higher contrast.
SkBlendMode::kExclusion 23 Exclusion  Subtracts darker from lighter with lower contrast.
SkBlendMode::kMultiply 24 Multiply  Multiplies source with destination, darkening image.
SkBlendMode::kLastSeparableMode 24 Last blend mode operating separately on components.
SkBlendMode::kHue 25 Hue  Replaces hue of destination with hue of source, leaving saturation and luminosity unchanged.
SkBlendMode::kSaturation 26 Saturation  Replaces saturation of destination saturation hue of source, leaving hue and luminosity unchanged.
SkBlendMode::kColor 27 Color  Replaces hue and saturation of destination with hue and saturation of source, leaving luminosity unchanged.
SkBlendMode::kLuminosity 28 Luminosity  Replaces luminosity of destination with luminosity of source, leaving hue and saturation unchanged.
SkBlendMode::kLastMode 28 Used by tests to iterate through all valid values.

See Also

SkCanvas::drawColor SkCanvas::drawVertices SkPaint SkShader::MakeCompose SkXfermodeImageFilter


SkBlendMode::kClear sets destination to: [0, 0]. Use SkBlendMode::kClear to initialize a buffer to fully transparent pixels when creating a mask with irregular edges.

Example

SK_ColorYELLOW is ignored because SkBlendMode::kClear ignores the source pixel value and the destination pixel value, always setting the destination to zero.

See Also

SkCanvas::clear


Given: Sa as source Alpha, Sc as source Color component; SkBlendMode::kSrc sets destination to: [Sa, Sc]. Use SkBlendMode::kSrc to copy one buffer to another. All pixels are copied, regardless of source and destination Alpha values. As a parameter to SkCanvas::drawAtlas, selects sprites and ignores colors.

Example

SkBlendMode::kSrc does not blend transparent pixels with existing background; it punches a transparent hole in the existing image.

See Also

SkSurface::draw SkSurface::readPixels


Given: Da as destination Alpha, Dc as destination Color component; SkBlendMode::kDst preserves destination set to: [Da, Dc]. Setting Paint Blend_Mode to SkBlendMode::kDst causes drawing with Paint to have no effect. As a parameter to SkCanvas::drawAtlas, selects colors and ignores sprites.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kSrcOver replaces destination with: [Sa + Da * (1 - Sa), Sc + Dc * (1 - Sa)], drawing source over destination. SkBlendMode::kSrcOver is the default for Paint.

SkBlendMode::kSrcOver cannot make destination more transparent; the result will be at least as opaque as the less transparent of source and original destination.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kDstOver replaces destination with: [Da + Sa * (1 - Da), Dc + Sc * (1 - Da)], drawing destination over source. Has no effect destination if is opaque.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha; SkBlendMode::kSrcIn replaces destination with: [Sa * Da, Sc * Da], drawing source with destination opacity.

Example


Given: Sa as source Alpha, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kDstIn replaces destination with: [Da * Sa, Dc * Sa], scaling destination Alpha by source Alpha. Resulting destination is visible where source is visible.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha; SkBlendMode::kSrcOut replaces destination with: [Sa * (1 - Da), Sc * (1 - Da)], drawing source fully where destination Alpha is zero. Is destination is opaque, has no effect.

Example


Given: Sa as source Alpha, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kDstOut replaces destination with: [Da * (1 - Sa), Dc * (1 - Sa)], scaling destination Alpha by source transparency. Resulting destination is visible where source is transparent. If source is transparent, has no effect.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kSrcATop replaces destination with: [Da, Sc * Da + Dc * (1 - Sa)], replacing opaque destination with opaque source. If source or destination is transparent, has no effect.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kDstATop replaces destination with: [Sa, Dc * Sa + Sc * (1 - Da)], making destination transparent where source is transparent.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kXor replaces destination with: [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa)], exchanging the transparency of the source and destination.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kPlus replaces destination with: [Sa + Da, Sc + Dc], summing the Alpha and Color components.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kModulate replaces destination with: [Sa * Da, Sc * Dc], scaling Alpha and Color components by the lesser of the values. SkBlendMode::kModulate differs from SkBlendMode::kMultiply in two ways. SkBlendMode::kModulate like SkBlendMode::kSrcATop alters the destination inside the destination area, as if the destination Alpha defined the boundaries of a soft clip. SkBlendMode::kMultiply like SkBlendMode::kSrcOver can alter the destination where the destination is transparent. SkBlendMode::kModulate computes the product of the source and destination using Premultiplied component values. SkBlendMode::kMultiply the product of the source and destination using Unpremultiplied component values.

Example

If source and destination are opaque, SkBlendMode::kModulate and SkBlendMode::kMultiply produce the same results.


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kScreen replaces destination with: [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc].

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kOverlay replaces destination with: [Sa + Da - Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa) + (2 * Dc <= Da ? 2 * Sc * Dc : Sa * Da - 2 * (Da - Dc) * (Sa - Sc))].

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kDarken replaces destination with: [Sa + Da - Sa * Da, Sc + Dc - max(Sc * Da, Dc * Sa)]. SkBlendMode::kDarken does not make an image darker; it replaces the destination component with source if source is darker.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kLighten replaces destination with: [Sa + Da - Sa * Da, Sc + Dc - min(Sc * Da, Dc * Sa)]. SkBlendMode::kDarken does not make an image lighter; it replaces the destination component with source if source is lighter.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kColorDodge replaces destination with: [Sa + Da - Sa * Da, Dc == 0 ? Sc * (1 - Da) : Sc == Sa ? Sc + Da * (1 - Sa) : Sa * min(Da, Dc * Sa / (Sa - Sc)) + Sc * (1 - Da) + Da * (1 - Sa)], making destination brighter to reflect source.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kColorBurn replaces destination with: [Sa + Da - Sa * Da, Dc == Da ? Dc + Sc * (1 - Da) : Sc == 0 ? Da * (1 - Sa) : Sa * (Da - min(Da, (Da - Dc) * Sa / Sc)) + Sc * (1 - Da) + Da * (1 - Sa)], making destination darker to reflect source.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kHardLight replaces destination with: [Sa + Da - Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa) + 2 * Sc <= Sa ? 2 * Sc * Dc : Sa * Da - 2 * (Da - Dc) * (Sa - Sc)], making destination lighter or darker, depending on source.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; where m = Da > 0 ? Dc / Da : 0; SkBlendMode::kSoftLight replaces destination with: [Sa + Da - Sa * Da, Sc / Da + Dc / Sa + (2 * Sc <= Sa ? Dc * (Sa + (2 * Sc - Sa) * (1 - m)) : Dc * Sa + Da * (2 * Sc - Sa) * (4 * Dc <= Da ? (16 * m * m + 4 * m) * (m - 1) + 7 * m : sqrt(m) - m))], making destination lighter or darker, depending on source.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kDifference replaces destination with: [Sa + Da - Sa * Da, Sc + Dc - 2 * min(Sc * Da, Dc * Sa)], replacing destination with lighter less darker.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kExclusion replaces destination with: [Sa + Da - Sa * Da, Sc + Dc - 2 * Sc * Dc], replacing destination with lighter less darker, ignoring Alpha.

Example


Given: Sa as source Alpha, Sc as source Color component, Da as destination Alpha, Dc as destination Color component; SkBlendMode::kMultiply replaces destination with: [Sa + Da - Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa) + Sc * Dc], the product of Unpremultiplied source and destination. SkBlendMode::kMultiply makes the image darker.

Example


Given: Sa as source Alpha, S as source Color, Da as destination Alpha, D as destination Color; SkBlendMode::kHue replaces destination with: [Sa + Da - Sa * Da, SetLuminosity(SetSaturation(S, Saturation(D)), Luminosity(D))], source hue, leaving destination luminosity and saturation unchanged.

Example


Given: Sa as source Alpha, S as source Color, Da as destination Alpha, D as destination Color; SkBlendMode::kHue replaces destination with: [Sa + Da - Sa * Da, SetLuminosity(SetSaturation(D, Saturation(S)), Luminosity(D))], source hue, leaving destination luminosity and saturation unchanged.

Example


Given: Sa as source Alpha, S as source Color, Da as destination Alpha, D as destination Color; SkBlendMode::kColor replaces destination with: [Sa + Da - Sa * Da, SetLuminosity(S, Luminosity(D))], source hue and saturation, leaving destination luminosity unchanged.

Example


Given: Sa as source Alpha, S as source Color, Da as destination Alpha, D as destination Color; SkBlendMode::kLuminosity replaces destination with: [Sa + Da - Sa * Da, SetLuminosity(D, Luminosity(S))], source luminosity, leaving destination hue and saturation unchanged.

Example


const char* SkBlendMode_Name(SkBlendMode blendMode)

Returns name of blendMode as null-terminated C string.

Parameters

blendMode one of:

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

Return Value

C string

Example

Example Output

default blend: SkBlendMode::kSrcOver

See Also

SkBlendMode