| #Topic Blend_Mode_Overview | |
| Describes how destination pixel is replaced with a combination of itself and | |
| source pixel. Blend_Mode may use source, destination, or both. Blend_Mode may | |
| operate on each Color component independently, or may allow all source pixel | |
| components to contribute to one destination pixel component. | |
| Blend_Mode does not use adjacent pixels to determine the outcome. | |
| Blend_Mode uses source and read destination Alpha to determine written | |
| destination Alpha; both source and destination Alpha may also affect written | |
| destination Color components. | |
| Regardless of how Alpha is encoded in source and destination pixel, nearly all | |
| Color_Types treat it as ranging from zero to one. And, nearly all Blend_Mode | |
| algorithms limit the output so that all results are also zero to one. | |
| Two exceptions are SkBlendMode::kPlus and kRGBA_F16_SkColorType. | |
| SkBlendMode::kPlus permits computing Alpha and Color component values larger | |
| than one. For Color_Types other than kRGBA_F16_SkColorType, resulting Alpha | |
| and component values are clamped to one. | |
| kRGBA_F16_SkColorType permits values outside the zero to one range. It is up | |
| to the client to ensure that the result is within the range of zero to one, | |
| and therefore well-defined. | |
| #Subtopic Porter_Duff | |
| #Alias Porter_Duff ## | |
| #Line # classic color blend algorithms ## | |
| #A Compositing Digital Images # https://graphics.pixar.com/library/Compositing/paper.pdf ## | |
| describes Porter_Duff modes SkBlendMode::kClear through SkBlendMode::kXor. | |
| Drawing a bitmap with transparency using Porter_Duff compositing is free to clear | |
| the destination. | |
| #Illustration 1 | |
| Draw geometry with transparency using Porter_Duff compositing does not combine | |
| transparent source pixels, leaving the destination outside the geometry untouched. | |
| #Illustration 2 | |
| ## | |
| #Subtopic Lighten_Darken | |
| #Line # color blends to lighten or darken result ## | |
| Modes SkBlendMode::kPlus and SkBlendMode::kScreen use | |
| simple arithmetic to lighten or darken the destination. Modes | |
| SkBlendMode::kOverlay through SkBlendMode::kMultiply use more complicated | |
| algorithms to lighten or darken; sometimes one mode does both, as described by | |
| #A Blend Modes # https://en.wikipedia.org/wiki/Blend_modes ## | |
| . | |
| #Illustration | |
| ## | |
| #Subtopic Modulate_Blend | |
| #Line # multiply color components ## | |
| SkBlendMode::kModulate is a mashup of SkBlendMode::kSrcATop and SkBlendMode::kMultiply. | |
| It multiplies all components, including Alpha; unlike SkBlendMode::kMultiply, if either | |
| source or destination is transparent, result is transparent. SkBlendMode::kModulate | |
| uses Premultiplied values to compute the product; SkBlendMode::kMultiply uses Unpremultiplied | |
| values to compute the product. | |
| #Illustration | |
| ## | |
| #Subtopic Color_Blends | |
| #Line # non-separable blend modes ## | |
| Modes SkBlendMode::kHue, SkBlendMode::kSaturation, SkBlendMode::kColor, and | |
| SkBlendMode::kLuminosity convert source and destination pixels using all | |
| components color information, using | |
| ###$ | |
| $A non-separable blend modes $ https://www.w3.org/TR/compositing-1/#blendingnonseparable $$ | |
| $$$# | |
| . | |
| #Illustration | |
| ## | |
| #Topic Blend_Mode_Overview ## |