1cb93a386Sopenharmony_ci--- 2cb93a386Sopenharmony_cititle: 'SkBlendMode Overview' 3cb93a386Sopenharmony_cilinkTitle: 'SkBlendMode Overview' 4cb93a386Sopenharmony_ci 5cb93a386Sopenharmony_ciweight: 260 6cb93a386Sopenharmony_ci--- 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ciDescribes how destination <a href='undocumented#Pixel'>pixel</a> is replaced 9cb93a386Sopenharmony_ciwith a combination of itself and source <a href='undocumented#Pixel'>pixel</a>. 10cb93a386Sopenharmony_ci<a href='#Blend_Mode'>Blend_Mode</a> may use source, destination, or both. 11cb93a386Sopenharmony_ci<a href='#Blend_Mode'>Blend_Mode</a> may operate on each 12cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html'>Color</a> component 13cb93a386Sopenharmony_ciindependently, or may allow all source <a href='undocumented#Pixel'>pixel</a> 14cb93a386Sopenharmony_cicomponents to contribute to one destination 15cb93a386Sopenharmony_ci<a href='undocumented#Pixel'>pixel</a> component. 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci<a href='#Blend_Mode'>Blend_Mode</a> does not use adjacent pixels to determine 18cb93a386Sopenharmony_cithe outcome. 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ci<a href='#Blend_Mode'>Blend_Mode</a> uses source and read destination 21cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html#a918cf5a3a68406ac8107f6be48fb906e'>Alpha</a> 22cb93a386Sopenharmony_cito determine written destination 23cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html#a918cf5a3a68406ac8107f6be48fb906e'>Alpha</a>; 24cb93a386Sopenharmony_ciboth source and destination 25cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html#a918cf5a3a68406ac8107f6be48fb906e'>Alpha</a> 26cb93a386Sopenharmony_cimay also affect written destination 27cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html'>Color</a> components. 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ciRegardless of how 30cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html#a918cf5a3a68406ac8107f6be48fb906e'>Alpha</a> 31cb93a386Sopenharmony_ciis encoded in source and destination <a href='undocumented#Pixel'>pixel</a>, 32cb93a386Sopenharmony_cinearly all <a href='#Image_Info_Color_Type'>Color_Types</a> treat it as ranging 33cb93a386Sopenharmony_cifrom zero to one. And, nearly all <a href='#Blend_Mode'>Blend_Mode</a> 34cb93a386Sopenharmony_cialgorithms limit the output so that all results are also zero to one. 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ciTwo exceptions are 37cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kPlus'>kPlus</a> 38cb93a386Sopenharmony_ciand 39cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkImageInfo_8h.html#a9ac0b62b3d2c6c7e1a80db557243f93e'>kRGBA_F16_SkColorType</a>. 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kPlus'>kPlus</a> 42cb93a386Sopenharmony_cipermits computing 43cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html#a918cf5a3a68406ac8107f6be48fb906e'>Alpha</a> 44cb93a386Sopenharmony_ciand <a href='https://api.skia.org/SkColor_8h.html'>Color</a> component values 45cb93a386Sopenharmony_cilarger than one. For <a href='#Image_Info_Color_Type'>Color_Types</a> other than 46cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkImageInfo_8h.html#a9ac0b62b3d2c6c7e1a80db557243f93e'>kRGBA_F16_SkColorType</a>, 47cb93a386Sopenharmony_ciresulting 48cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html#a918cf5a3a68406ac8107f6be48fb906e'>Alpha</a> 49cb93a386Sopenharmony_ciand component values are clamped to one. 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkImageInfo_8h.html#a9ac0b62b3d2c6c7e1a80db557243f93e'>kRGBA_F16_SkColorType</a> 52cb93a386Sopenharmony_cipermits values outside the zero to one range. It is up to the client to ensure 53cb93a386Sopenharmony_cithat the result is within the range of zero to one, and therefore well-defined. 54cb93a386Sopenharmony_ci 55cb93a386Sopenharmony_ci<a name='Porter_Duff'></a> 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci<a href='https://graphics.pixar.com/library/Compositing/paper.pdf'>Compositing 58cb93a386Sopenharmony_ciDigital Images</a></a> describes 59cb93a386Sopenharmony_ci<a href='#Blend_Mode_Overview_Porter_Duff'>Porter_Duff</a> modes 60cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kClear'>kClear</a> 61cb93a386Sopenharmony_cithrough 62cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kXor'>kXor</a>. 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ciDrawing a <a href='https://api.skia.org/classSkBitmap.html'>bitmap</a> with 65cb93a386Sopenharmony_citransparency using <a href='#Blend_Mode_Overview_Porter_Duff'>Porter_Duff</a> 66cb93a386Sopenharmony_cicompositing is free to clear the destination. 67cb93a386Sopenharmony_ci 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_ci 70cb93a386Sopenharmony_ciDraw geometry with transparency using 71cb93a386Sopenharmony_ci<a href='#Blend_Mode_Overview_Porter_Duff'>Porter_Duff</a> compositing does not 72cb93a386Sopenharmony_cicombine transparent source pixels, leaving the destination outside the geometry 73cb93a386Sopenharmony_ciuntouched. 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ci 76cb93a386Sopenharmony_ci 77cb93a386Sopenharmony_ci<a name='Lighten_Darken'></a> 78cb93a386Sopenharmony_ci 79cb93a386Sopenharmony_ciModes 80cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kPlus'>kPlus</a> 81cb93a386Sopenharmony_ciand 82cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kScreen'>kScreen</a> 83cb93a386Sopenharmony_ciuse simple arithmetic to lighten or darken the destination. Modes 84cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kOverlay'>kOverlay</a> 85cb93a386Sopenharmony_cithrough 86cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kMultiply'>kMultiply</a> 87cb93a386Sopenharmony_ciuse more complicated algorithms to lighten or darken; sometimes one mode does 88cb93a386Sopenharmony_ciboth, as described by <a href='https://en.wikipedia.org/wiki/Blend_modes'>Blend 89cb93a386Sopenharmony_ciModes</a></a> . 90cb93a386Sopenharmony_ci 91cb93a386Sopenharmony_ci 92cb93a386Sopenharmony_ci 93cb93a386Sopenharmony_ci<a name='Modulate_Blend'></a> 94cb93a386Sopenharmony_ci 95cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kModulate'>kModulate</a> 96cb93a386Sopenharmony_ciis a mashup of 97cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcATop'>kSrcATop</a> 98cb93a386Sopenharmony_ciand 99cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kMultiply'>kMultiply</a>. 100cb93a386Sopenharmony_ciIt multiplies all components, including 101cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html#a918cf5a3a68406ac8107f6be48fb906e'>Alpha</a>; 102cb93a386Sopenharmony_ciunlike 103cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kMultiply'>kMultiply</a>, 104cb93a386Sopenharmony_ciif either source or destination is transparent, result is transparent. 105cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kModulate'>kModulate</a> 106cb93a386Sopenharmony_ciuses <a href='undocumented#Premultiply'>Premultiplied</a> values to compute the 107cb93a386Sopenharmony_ciproduct; 108cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kMultiply'>kMultiply</a> 109cb93a386Sopenharmony_ciuses <a href='undocumented#Unpremultiply'>Unpremultiplied</a> values to compute 110cb93a386Sopenharmony_cithe product. 111cb93a386Sopenharmony_ci 112cb93a386Sopenharmony_ci 113cb93a386Sopenharmony_ci 114cb93a386Sopenharmony_ci<a name='Color_Blends'></a> 115cb93a386Sopenharmony_ci 116cb93a386Sopenharmony_ciModes 117cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kHue'>kHue</a>, 118cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kSaturation'>kSaturation</a>, 119cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kColor'>kColor</a>, 120cb93a386Sopenharmony_ciand 121cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkBlendMode_8h.html#ad96d76accb8ff5f3eafa29b91f7a25f0'>SkBlendMode</a>::<a href='#SkBlendMode_kLuminosity'>kLuminosity</a> 122cb93a386Sopenharmony_ciconvert source and destination pixels using all components 123cb93a386Sopenharmony_ci<a href='https://api.skia.org/SkColor_8h.html'>color</a> information, using 124cb93a386Sopenharmony_ci<a href='https://www.w3.org/TR/compositing-1/#blendingnonseparable'>non-separable 125cb93a386Sopenharmony_ciblend modes</a></a> . 126cb93a386Sopenharmony_ci 127cb93a386Sopenharmony_ci 128