From c7dacca00828e586ce4496d83a25a4d60a6fb60f Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Fri, 31 Mar 2017 18:56:37 -0700 Subject: [PATCH] Documentation for PorterDuffXfermode It tooks 10 years, but better late than never! Bug: 32984164 Test: Compiled documentation and checked in Chrome Change-Id: I6dfd7fba6d3077f8c774b203589083bdbc15f9d2 --- .../images/graphics/composite_ADD.png | Bin 0 -> 4525 bytes .../images/graphics/composite_CLEAR.png | Bin 0 -> 959 bytes .../images/graphics/composite_DARKEN.png | Bin 0 -> 4498 bytes .../images/graphics/composite_DST.png | Bin 0 -> 4571 bytes .../images/graphics/composite_DST_ATOP.png | Bin 0 -> 2242 bytes .../images/graphics/composite_DST_IN.png | Bin 0 -> 2111 bytes .../images/graphics/composite_DST_OUT.png | Bin 0 -> 3719 bytes .../images/graphics/composite_DST_OVER.png | Bin 0 -> 4575 bytes .../images/graphics/composite_LIGHTEN.png | Bin 0 -> 4354 bytes .../images/graphics/composite_MULTIPLY.png | Bin 0 -> 2200 bytes .../images/graphics/composite_OVERLAY.png | Bin 0 -> 4663 bytes .../images/graphics/composite_SCREEN.png | Bin 0 -> 4481 bytes .../images/graphics/composite_SRC.png | Bin 0 -> 1026 bytes .../images/graphics/composite_SRC_ATOP.png | Bin 0 -> 4579 bytes .../images/graphics/composite_SRC_IN.png | Bin 0 -> 2020 bytes .../images/graphics/composite_SRC_OUT.png | Bin 0 -> 2052 bytes .../images/graphics/composite_SRC_OVER.png | Bin 0 -> 3734 bytes .../images/graphics/composite_XOR.png | Bin 0 -> 4616 bytes .../java/android/graphics/ColorSpace.java | 48 +-- graphics/java/android/graphics/Paint.java | 12 +- .../java/android/graphics/PorterDuff.java | 343 ++++++++++++++++-- .../android/graphics/PorterDuffXfermode.java | 6 + 22 files changed, 359 insertions(+), 50 deletions(-) create mode 100644 docs/html/reference/images/graphics/composite_ADD.png create mode 100644 docs/html/reference/images/graphics/composite_CLEAR.png create mode 100644 docs/html/reference/images/graphics/composite_DARKEN.png create mode 100644 docs/html/reference/images/graphics/composite_DST.png create mode 100644 docs/html/reference/images/graphics/composite_DST_ATOP.png create mode 100644 docs/html/reference/images/graphics/composite_DST_IN.png create mode 100644 docs/html/reference/images/graphics/composite_DST_OUT.png create mode 100644 docs/html/reference/images/graphics/composite_DST_OVER.png create mode 100644 docs/html/reference/images/graphics/composite_LIGHTEN.png create mode 100644 docs/html/reference/images/graphics/composite_MULTIPLY.png create mode 100644 docs/html/reference/images/graphics/composite_OVERLAY.png create mode 100644 docs/html/reference/images/graphics/composite_SCREEN.png create mode 100644 docs/html/reference/images/graphics/composite_SRC.png create mode 100644 docs/html/reference/images/graphics/composite_SRC_ATOP.png create mode 100644 docs/html/reference/images/graphics/composite_SRC_IN.png create mode 100644 docs/html/reference/images/graphics/composite_SRC_OUT.png create mode 100644 docs/html/reference/images/graphics/composite_SRC_OVER.png create mode 100644 docs/html/reference/images/graphics/composite_XOR.png diff --git a/docs/html/reference/images/graphics/composite_ADD.png b/docs/html/reference/images/graphics/composite_ADD.png new file mode 100644 index 0000000000000000000000000000000000000000..90932c55ac530294bfc84e0c8af12bc58407025b GIT binary patch literal 4525 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 Mrq(8Z8F}3NA5NJPp8x;= literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_CLEAR.png b/docs/html/reference/images/graphics/composite_CLEAR.png new file mode 100644 index 0000000000000000000000000000000000000000..7c0731d43a5f4659c5559c462f0ab1160bf0f294 GIT binary patch literal 959 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIE+9%w?V~ zjv*Cu-rhBwc+`Q1_27H$V1xQJwFdzV-x4%t%R9tb*tv3fBwAx{qL~- z`TPIQ{uj2NZ;cQGhcIo>?zCq){~Z3>?f&~M{}WS#0VA!@hU(vTmGrPDJMG*v{wwb{ z-_HN9rcawdgT%$|?e8aFr-wbGQABPu{$_vjuh8z`)CbgTe~DWM4f`qa)+ literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_DARKEN.png b/docs/html/reference/images/graphics/composite_DARKEN.png new file mode 100644 index 0000000000000000000000000000000000000000..a798b97da588d71cb507c68690ca5b39bb33c33d GIT binary patch literal 4498 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 Sh?0IvfV+#gbG=je#eV@PBASW- literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_DST_IN.png b/docs/html/reference/images/graphics/composite_DST_IN.png new file mode 100644 index 0000000000000000000000000000000000000000..cf50a7b068b5e2814ffc242941166f2f349dc662 GIT binary patch literal 2111 zcmcImYdG6k8bALqE>o9^j*447RZXY$RI?$r2%)hqv6QWubn4!^RA*PK+G-^HnXbAs zH6$2uD^)hERn@14sJd)BC4{tfO#019GMIuJ^x~u0o4P?+YE~NvYzV1nOIhXM3;*@Xp zFSktlS7dm6`@SE=eAKG-WeT&_=4@#dshLB1w$Jn16h6VDgCvL^-h>wKFjD?2+c>!l|<2?E&fMHG6b7-R$P-AU=8h zc0Gl8Qs6f<-g<@NL=SAg$q~&sB=v{*SBt7u+%&sFvme~kLuo#=I_K?1yNk*_L*A>%hM`*cFzA&_(utgRY%b=ly9{N z6BL0xqu$Kdv)8wMg(o(@lqnSs0h=2#t%@^(mmh1eU8$O+2Y*WQvWCCXhkdl|DE|dI z0k@it5g`L_U_VO)YQ-Qv=1BkzvSNYwm!+`QDM)m-Rm|q=hdxuSIFmCV@$%gb*9ky% z0mRr6l56Fv)Lk#z$KCEJT2_!K_2qe>;su^|8K-C+M`+(qgTT-mHS|>uwylT__8kU6 zLvNpcTi-m)$A?aItD|A5;l1;@0($wgw zz$%qCMfEQG;wr{0Yoh+?QJW{rU01o{#e*j_y23Gk>m9YzDGG+#^k6re_C&|XTTWCY z&KnqvjgDEn5oiAuCRc~3mloAu_q@8sJ?WjiA4b&ddx=TKG)I=dAd4ND)x@u$A!If*>L&N;E65MKaliQ8Y zt9*)w2iPRFil+@XRvxD79n=lGrb#M~mQJEAVt6G8F(V7O@VJs(f) zR;}P^m(h==S^qXW0@1o#V!$JI@&~R^pSsjt70(1(>2sZbZI;eQF)rpeqG5=iAXggR zmI&%zHytPb-O?4PdCyd8H%s3LbNlA|DZXKv`(fxD=RD^3q??4aVB&${WsZwMW5A|z zc1*^b9$q=ba4eZ=xH#J#TeZ2hwv_V&IY}9jC&YBYr3`83la0Az*3_aU^a%?nB!(<{ zlD6H;vTuDuLCv{=qRjeCag*aWc1bq~k?TZ%nzo87C}QotC)?SmZTgSzgYQiK46OWG z9L&;7W7)Y6@mp19nB&B|PL_ajz5z3WWoMVhc6^9{%Dn*kizwpRKsh_RxZ^_5wRGe| z9bV)ZUtH~OezKAEefZovLb;(iz_iLPm=*|~(RN821JNDwUmEnVM?r?b`1{^vU3T8b zT_lit2$TnSR308xUKfK>TP8qe?)|X-Vp?8iQyu7 zilIHjd|VciF(y==j#MuDjJ{C@(Ts@ZK;fHnmq4CrwZO^C=Bqm8VUL9ECU{wJ?s_7# zx>FG*z8#+eu0{oXBlz+(I=3lnt{HpyaFud?jm7vJH=4Y0;n5Dwa-7+i*$vRZ;QkM` zMx5;li}hIUB2SWah`jYd5FPT=Xc2*owGh365kFx`W=srW;f1&k`=Gj{BxAGhQso+* z3`F%YbcRj;8~5wE$vd?7!n?e|e)#`Xl2$Kax#QOMm??M0`UPgMrD#{>1U)_Epg7X{ mR?Dsi-ox*;6zxicQsw6cFK5LcO!SbB0C>9jkQ-e?Q~v|G*=QR8 literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_DST_OUT.png b/docs/html/reference/images/graphics/composite_DST_OUT.png new file mode 100644 index 0000000000000000000000000000000000000000..ee8a46e0c2c20e2ed3c65d31e24e5bd346dc3075 GIT binary patch literal 3719 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 literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_DST_OVER.png b/docs/html/reference/images/graphics/composite_DST_OVER.png new file mode 100644 index 0000000000000000000000000000000000000000..18389723903b5dfbb4327224264c0c4c12adb99a GIT binary patch literal 4575 zcmbVQc|4SD_rGU`A;#KZCK+Q3m5l768M5~X5k1+)5=lhaw;5TJGM36CTQ#0i%2Gna zWQ|1V$(DVcEMpj3CiC9)*YEw~_xZiQ_x|I)uFv;A*E#39ud`g|+_X7kCct-q4*&oG z3v=VM0004}5P%mB4$jw}dV>Skbt4OVUhs+L^-2K%k$V=#hW6ok%cC(A$y+o|4Gan`|FEucXr8HyIQ**zT6|m zg7KzlQwpXSE<;T81p=3Gf{TqaF*IUuC^2FodDnA#ww`NrbT5PyHMbRU&bC-Qn8Xt{ z)<3Gg?&mq)5QE`5XK!!5f+?}L4CX|$quH4rkD?T1Z4p358w!xUtp*q$@B~sc+5lnS zGzhj21tU<^;AC^p|BWC=!2l4Gkb96Ew7`{?G@T-K0z%Dor>f&F9LHU#1mA=o_9J*{ zzg7#tlySVMl&fOJC9d);I5CZoD5^(RbYgJbONoPjzH_&Cw8YmxY6fhcpmZfG{CS80 z9Aw*j&lJsr$-RLG+bX^aUj6823A6Im+5XY0o0huv29-C&-$p)}avP1fz9fuAGrF2T zV_<~k=^7mVB-g7qn2N1M;oVg`l&&I6t=?We&tAQ}c*UBd=KKDjoxpWAuBEN;_Fx1I z$nvRPeh+;1ZT&9k-rzQ{NgaPHZR+O`No_pp*F3~l%ljk^1JWwbwj9Iofy;8Hli#D7 z?2`N4frZm)b9Uul8A-L?id`zZkoLQnlID7rvd+~j$?I*Qw6yp2Ggor@+i7{BkhHb4 zbf#<~1dGi#j2<=P{z=8Fv?sm_($2eG7so?_t@m9Y_OMaUR0Ci|nv4ls`ND94Iq5ey z^LmnxF=!Fj74x*ipcedJOPM%tSAda*>C3w54rt6Q8zg*Fb)@Yyi=ThF@ND&3rPfmM z)rTMXC5hH2g=!ZSY5l7gAh044A3uX7?jsYWBgzJr!8MrDb9%%V!;mPp@XXa3FGCs)ryU2W5HK6+x9Tly7-u~Y@1Kn+#-fMxMXk#ctJY4< ztTc#rC&p9F__$y;Ug0%m4y6qu3i$J9Uq9hS5Gp1nV~bKZUXvk8P*=MHwWJ?qZ-nY> zhz&X_xauXd&ArAXM+aGh%&Y7+0^E4ln|r8c5AoNkzsRgF7dDUfV+|~m)d236 zZ=rxf*s&WKm+xT`_oNx0gS_VT;bFV6blVdN5GCQck*Eyz;c?Dz@ILL=`n67A2r zQ<2%Bo&XA)aN(X0AADYCV0Z0#k-@hr@=ss|w3_N|7eBl+Ixbi>rySk}QM zO=-(?rVqG6t$M|5E$(7#)nV1DAm^Dm{QlaWeKJkGE6~?$x4Gl zpC>>BT3YX4Ay@gPvrx$6KA)05;OiVB5pY80?uw#0`@0og&D?x%zU<9ts+BMd+u~;_ zr$-W*V9GTNS4zoqHmYg8;uRt&U|&J<65E8kE`_Va^PrzeN4)B-cfvRTdaW^BY^AOc z6e{8#FqGc%XhU|_8!(#tDi!xGJRg*)_BHc%iqs{(m_`KQ!x}zn--n?-Pn#B01P}O! z6B^v$SmW;R%Yjv2 z>4w~G7q&#w+9vQyZ2(tSthb89cF~>d&MhPb8Fys_Xa@wet|ap!gX^sj9IG^>p9ihgLzvvJT5>@_TnTTe3~N_gTbZ|oNrTD7@kn*uXWdo=fdUuw141OF)MgOJWr5y(D!KCfaDgjqNhn-L~(AuS` z=kB%rRk~!h%6qb*_SA1MeB0Wvg5>r*`T>G$)W*!3`lxTmy!MrGwt;dKRz#`2rbk>K zi$w~L#J&0sD}LYwAS=gyoR8!>e62gON+JghoU7FGs1vlbHZfNVRI_lyqXVZMYp8PRKx&?b(@s3qz4FP43_m&1XXZH~~_?v3rVi z!k(9hv3^la{L8g?N7wYs+&-EU8=^@D0 zrYB(2=by7sRCJlLfc5*_ED(dc{j^Bg+OZuUAp+5)_8f3_-a%c_%pdhMO z${GGR;3V2gpQDI&?c_{h5o9-&_hWUp7lOg`@q6KM6p+~j7y~eZQ8+TM|%M(#><(Tq#qr?cB>yCZ``U0Jb(14X#j4jvS|>HBc+q_{jd)& zi9WissxMSx-#MTa&NX3o+M)#9;PU{52JQF2cDCkppB&}y`h?jiNl<;=kD$WAcUL*D z+QDyULNh@1XPHO>rVK(s!3nP2EE2}_3tAtVLN0B+MV3#HfXr&L7C>9@?OYuFXG;qO z6mD)k`?c#?!G-1DJU8BPE2h58tdt>_0qCnkq@3Ma#46%RWda)Vy zQ_W+Z!$X3wB3ePGdeEa5PV(`T;pWAA2~nYVg%Ji|vh{KA^mjO7r>EU;_G!e+23<3D!JJ)|nPac3MaUJgAK;VQDt5Zp*(+MWs z7{?dEQJ~%WCEqqW*=Ay-jJ>zd=h1La9uDA>TD*{C^^ZPZ5mDzpB5uHLIph$WP;qzO zMG5qj5;n`Wv$_LN+Wblpxnw0@++O5imrGVR{OR-wLH2l(X;CT_8plG}doA6ZheEz3 zBtdv-jBaVgUtXq1ZUzm}!{$>1w-kl9P5RA!3foQnIIkw-8qSh9wr=C2$EeD@vYNJHMyueM~%G zUPylnt$+={gr62mxWuJ(I3?T8qh^cC177Y6mIg!51V36vp4~3?!5%1^u z0MIw#O~^qwC$}U%GpGd?yTOAZ(=($k+mq&*?=Nb*gvKYEG;(c@%B2Z!?zMO zpB#GqQw@;ma1zHn2)+%5?Vy`cK9GG!ext+sUOHOq$Bcpx%uzFNszPCgXgJo3qZJ{3 z%{x5t2{faevdtV%XmA424Y9lDBbml@H6@R!@qE$Y#6~b}39rtGsh2+{;oKP1ru~xI zNbrvEammT6?5#S2z5Tt`TrvJp z*C~JrddTOu?(?2>6Gsp>T6@(lqjhGpAQM3@S3J}+vjGU`&a=!`cC(7xi2!xz?~X-C zF7vHI#%{+F!C_}v366yxh-5Vxyt-=gb!r}#ntvac@snN^xEpdG!wnt|+UZ%+RD<7K z&@$P>yNwb<)XMAa)t#NTc1pN{IswK16|~>^L%o7AYK99Z@*e!=WHd zW-q4mA29oS43TmKqdIx%YI_KnuwjpzbG%RcM>m;6n%789uqbbhs|P*;#$U2D)tRCa zNR{v%$wOGuG??e|#9_kjLe?BD%mWR(NW^#Ql1o3OPG#8aTJ*T`R6(8B@e7$Qfjx_= zv^8gX&{G2scqQjJf2dW>_%Z{5fgs7VkK3omhN`E$^koeAVgyvtW^+CRVl7#q+wrv} zJ(LR^*a%zOA1^Yuv2dfyQ@gp=D}|-B+y+M7d>=&1vi9ihQx_*y4;s3Cdal%7qSy%A z%G>LE9Lx)|A#R>ywX0m8e;i7ftnWnX`79ChoN+>+j})8HaquEQYS|&F?q%ct#(MUH zzy$G3ET9IfW&B}0m$4Y(sf zm#sRg62nIWkR`XiZxQ#NN!X5tpO4JG;f+|iH3J)v(bCEZb3p-oX>^?$X1-=lwL7=v zavn>EyLG_0eAh4kG5iza zvAWUtZW{&fDw&tt8!bt>UCQTQjQ|o~KBMCThRUJ+q5m|oG=$%Hs5?nJr#IHT z(6cGNkxA`-dU&wklvaWkEGtEdiHSX0#{o#?yPw)|{$?tFGs1;VNlH@NZJVT=AyLET zgLbC0=j^peHUi9lPi*rq)7)ZKwHhj(i^p8ZEpDd^S6|i5E0LoVo)C2n8Smda2`58} z%BCYwU&6T_3x0KEu-RO8*htbY7y4!>7TCQkw8e(3cIs816@}3Nic!3z zkh{(F1GgQ!G#IUJbZgM8$wSRDj&&ZyQFVwXOy0`uDbdEo#Ag%fN z(PX{yp27kaY*#7YaSI4MM?CxNr8WM`27O>K{2bxGMP% z+qn0~7z)zcd*uF`ivIsB`Tui*d#s-w7FU1w8v5{@zI3qA`hT_;{!P}=M#=37ZxYG% z$L{C1Bx&b8=B*XiD1GRE(5Cn|KL4}Pv560Pd2R=qRWJi~Yyb5JV|PO6Uk^K$;>|KoA=a zLk9t=qX-tNl!T&mNCXTudDnS=-k(|Py?6hdv-a8dJKtSrpS|~Y@0gu66yTHK0{{pZ z8|hmB0KroTpi%H}$+!3lJaFC6HMT;-PY~KQ7674YV|^W~z|4h_;KW_4S?$bjQq9#X zqJ!LFJ0#zhQ6Uk9aJNH!2K#-jWdkz*x^PFfT_YXQJkf<%{)lC@)4B6oMiv}cm9?Qc=X&CF8~M1!obH@%2MdFnOZqZ#5MEUbNpw|4Q92wkAgM_VNJXds zeUuA`#k2t-@q~YJC@bX2y=k5*(eqNzY=I|f&<`!=PfUGhmUX$fi_hw+xZJ)MoaM0Q z;|Ss^36UX@ICDezV-H&GDDfx@k+CO9d_Z(IA*3VdxpogD?6awopBR|kVeOZAp%U4* z5s>STBR<*2TW#tTBV%go6+#_&2hNAbQ|&YLL^9@7j^|7En)G&Pyb`Z6Ol8c-) zQIwjtRmb{j{=QkSj=It4&gg*L67NZuwN}BZRzXLTp&X9OXtduaADf9TgDb-qI)Z|P z9GUYKhsD5&yv~aHQhU;~hUtFqm=l+ha5K%;d#eu9B5Qw`0E&l){`Z|%-%13iKfiue z?=Jmm^BrZdqE#{>H-DMbX!|E`U&aDu&Y0Tc6*40?95pwlcnNDGZj+wL?Kyt3^uQ%_ z@30)f{<$*XN_p3zIC6hlbep#tH!MPGv}2+e+qAbe^OQ#@=o+7~ofbD}D@7u5<~t z6yEgN@?C=vp|_aS zS~^7{uJ%2n+iO~p3(SSS=_d51O?n!mR@S#7X%8=y%qeMRm1Y! zM!KDx+EUhT8_$Y-UzT-b@49T;0MQ)@G z$i$X=^GLi=L6!{cC-7}^hxY4OJ<&vyw*6JY4MJ1UmG+Brxvy^s4A8OSAMIe6jy`nYM> z*Oe%rka8k9VW%^2?g+Uq?MszU!$qh)Wlx6EHJ3A1#3bXOSaHwRbCXM1hY2Y6bM{*hxdr@T-5vQVy3^9wP{{| zBW*XSUB>3l{_X*>8jo zRek_LA+7y3_u{ugw{ZisgX#z*zKLaC?PcIBnuHJT32Sy+V}EfbabYNwS<~#W%2|aO z6}bb?j}9e0dVR)~h9S1pRS%La)DKa}Xu>R>XE4DfupS z%+G#u^D>Z{d{c#6{GkBzK6Bxjt&>8$|E&NNUWz@&SHkLo`8g|U``H&5#$t&29$)M! z4Rg6Lzzq*m9$)IK*lVE}B3IxTwMP0Ke>gn#z!KW|Lwhd6_!@+aV;B_Pbrj|@^(q+` zA>3wP!|g#@bJ*nqbiZrXJm3#9V^!n+Xy6TXzmCG|hrC91T~eGkCb(#qNt9R#`blDl zu^vZ6k*V-WrkIt?;x(pv%~(w!vd|*pQDSYgSGg8L^hIN2zcZSOJP$K z+1Yvwdy>HAAq){cAN8ofFgN9Tw&0XA9+~^_P`{(XpgaLpm{9AuZ>w2kVdyeYE8FcA zerP#g`}2G4OJS9+`9Bv_K?akN^LAXb)^<}}9Ng_`k{*ArX-TerukPt!lm>n5$Y{X% z1d_D*?o7P3V;H`8pi5bf_7)-5=`>jf-U+LJBEqa*EJ1b%Kq+t#LUt zE~RY_U??cqSUgkn%b5EWYfL3ZGb`(!UDkkC;sUnvVsB}z4j+$%J`%?(x?I&8yr^jl z$^d$5AwJvaG^5g?498@Ufah6N03Cd@nJmN^*$%60g7f^~>+@tT)s%Z*01BVm=^cU~ zs@7GE{JmE2lev}Sy4FgMk5C3We$ls=)F1C;o;F01A|SMp3Xq9{Vj&bIl7Ysf-qu~0 z{^U?N*7XHLG{XR1rZ~7&V#yh?jjbuzwY8EAq2v02QS3cWP-1n6+tzk6{9)KtqdyCQ z?`J)kK`Pst9NzMyZ1=rR&e>cq7!W_omD#f5jjrQG;qmqm{$NO#V4VO=v1A3fzRVN} z+=(F)$)sMR9zQKpXp$)b?l^%-<}OOXFE)WY5?dHjxpn?CP=`$jCmHdJv0DuMsyxYz z(>UY^5MK`vfcX18ns|n~7=;pOseFGN`+WzcN_fp2f3jP9U1rT>YZrcZg)x@c##F1@ zL}DnrH3f2u*Co0*5Q@l;qCEaCxLEY}0UR#m!A}I{$G8m&B6FM0fjVuWldVfxF#&x~ zZ7W)V8y#sQOW+c3t~Kkf)rJqS%$5vPqmPhFE4)-dhBDYCVmHNsLqy;e(rnkwY!1Aa zdYvHA{NpV)RvFkbCy0EHj`&ygEvNtq1w`YXD08=K{EOeFJVs=Yxt}0#xF9CC$5%-l z;!M)xDSN5V$7^9LAjP))j;I^$05W$_6&S)UEAE|5^($u<9>HO+5w}qeq_Q&KcXQ9v zk0I7i!}ldS6-TjX=N)56Is#qh3Ci|oJu{EBB39Jxq|t5;trClAL$LoT2(%!hPib!EC}I~{;cv+! zBZwDZi+t}edUGS~?=(=%MR%XsFZcR+w;f;au-L4Y7$tFAf^wL^^_!_y{I!lHHb4s1 z)PwAFT)1$1_6l#Y?pk`HI0dbV2_ZbFIh&PY_|r4zj;jNlxcrfURxo_R{CQbo*4JbA zgH^zebpgsb82@KasimW-`<-98PTvDOIfd1EonGsrnph@1B#9KtOK-Z|Jl*o#lp4PJ zbXjUd7EZJ|h+^1_nOv5%xp-BYrU0ANL0Mr;?!aFm>u`g#wT}u3G5EorU#5-(!p^~q z2j0zJbbS@Q3`374`LX!vB;y~wg;~aG0 zncb1y4_|MHZp;g!hy!}`Rj{*qDl>Yv|5f6zD)XJvk32KM>dN1!_td@ct+G~(BId^9 z!!!E~ZCOqWi7O*hfhNu7)fp;Cux~;VF#4FC5~i@90XEE^J?eQ$h5V2$qOZ^6YtA`k5LV zassv$wDfdCn!gdaxX*3AEiATU8PBMkm8+4&Syqnl&`p7NDlU>-@Z$rokCw(cazX=K zv#Z;on~&Kld0RzoJ->-Zy$d}X{Y7|zw0S$c2=FS4HZIWLJ~pOLmC11!U-j$OAQWCD z4Y_t;?QYZY<;|bE>rHcG_Nu!7ZbDplQXZK*Tz)X#s-!kC-Q9p*%KTDbII|mWeQcrO z*o|X62XVtH%|5PQ?=noaFOXBb;m*ZPn-Yp*oMt?0eyqyZt7L!g$94|S#%fyj6T^Ak zJUjupN{Qe2V9=NMrqn3(lY3|W*@gJwZOe~y<6~hJmh!ugn)DpeL>N^a1uuC@b;&{z zHtAUr(M8@dB8*l^9t@Fhp2ufT;3=UKL%Kg{9KrRN22^iR`ihz@Bc6D0EI;HFWAAJ~ zPh0%iWUW5y{G{6LrITrkf;*9ksgdjJh|;_fYw48=o~u=I(mVoRZ%B#_ULtkSCb9ih+o02Eiju`+>Lab}YW0r_#># zV(Cj<#JtIQ{E?vC6}2Q6fcbM@;|O??7jlRp92YzL%z7JCkDmg)k+~02oLrFw$HqZP~%lIs*bJJ z+K*@v`WZ3qsdq^Xo;DW(yUGzv2m2!*+?rR}+t>>Z05SaUR@lHIwdQ@=!sX0-I#&B6 zIdi}nOh?*6Tf0^-zl%W}=Tx-|wai&H?dicTc2Jx497T^7AE66~2>h+ z9^pG~lN4-*Z88GQX4saGvEP{}R*beQsLSK7n#x8kZRs!`ty>qt7o*rv5DJ_bmiQl@6FsYQIi9d#$snd$93!OitM>C%gNt*Es+?h<=F mesMHV6Y>Ab`(GRU42>!eh}~!}XK!Zbd#m*XfBBQ4U8{e}<7v9$--W z#qI-lZue0nd8ejg_>9QPA?2@d2H!QSZpf$VVclrh$w+K;BJIRFZk1hp$SqIabK0da zf7GesYdbr;EuZ|az@cioT_78%$Z%UCP{{-zIcI%$2J!2Xi6Kcl2Ct^UM$ z@UD3K=lg;x99Ei>r^EXMHA^csM`R@&8gQ5`z~5DBZ+C!IetS^R(T@oiX_tD;8)Llv zx!+>AhQ9L)R?aXFUvNq^_`M2)>;gP);b}||saH}yll*EGb3V?{N`LX!V zJr?y}*!G9#}fVE*$`dlaR7~)GJXx zZZcK7)OBI`eOEtbGF9w7QIgy|Uc!$Xph+t-{jZ!_x_C*wD(z&R*IcerDhOKiES0K$ z3k8of`@S~4NgB;mjtm8UMOM&#=69lxRw)(%85_c z5*us4RSV!dJHFvx0#zvEkTARu!!=jEO^nM}HBpmf2D~VE@3iV=<4%*L)4Bc|=tvkH z797`PlcJt3vOoFXO&KIAym!~olJ!;UK6YE24k-xU>-IyalP!Av)%Z+4j<4L(g@V!T z`6c-nVGENJ^3$Uy&=L$rcg4}-JB1}qpKe%aa-R0QJoS;w>e`mgJVAyLc>1+Cd|zK*7z^#|4Z3RU>ru4~q1aI^Y2sT!ugLU*E_IuF?(H~b_({js z%gbrN>=Co)C3CuVUh(X;N^r^dS#l&799P~=!c9psW7Db59Mf0{|HWV$2E*;JDI!># zu+Fj7njCq@({BjUSq8g3<6_9m%Ho;gAp=Q5b$Se8s6%2gel<5G(JU-kljHclE4_b! zZU>u;dKH3qe*Z3pr#WvVoiU0NEVgRCX;%J{?YQ=WU0%@#T6AuxpP9BhY0ApVn2RF> zg}6#fAU^7R=%LLo;g}Q(J&XqNm0-AIHo9%>wHcy5M;I( zSNOH)(}d`*d|gD;cW?KfQ9W;TWUE4Siq{gG*ERWWZ&tEEK+q;OJ2E0p_;5W%c6f3w wSqJ&|ItEnzyVxA4^80e1P0CjbBd literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_OVERLAY.png b/docs/html/reference/images/graphics/composite_OVERLAY.png new file mode 100644 index 0000000000000000000000000000000000000000..700a6b29fa54d6ac55063680becc6308030a3aea GIT binary patch literal 4663 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 GxPJoV?^K!q literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_SCREEN.png b/docs/html/reference/images/graphics/composite_SCREEN.png new file mode 100644 index 0000000000000000000000000000000000000000..b698819615e7f652db7501c3a94d44666a308651 GIT binary patch literal 4481 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 literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_SRC.png b/docs/html/reference/images/graphics/composite_SRC.png new file mode 100644 index 0000000000000000000000000000000000000000..2d70a54ad807e3e99b4dfee54f69d2e6a28f9804 GIT binary patch literal 1026 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 Mn^+l_8@a~*AK!*6=Kufz literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_SRC_IN.png b/docs/html/reference/images/graphics/composite_SRC_IN.png new file mode 100644 index 0000000000000000000000000000000000000000..1d6145b88f0930ef3ed798fb043636f591587684 GIT binary patch literal 2020 zcmcJQZB&wH7{~7ipDDg%PMb5#*=FH(N)NVt84D$|k=3NkCpm!1!gNzHhbbG%;HWJ< zX4J|`Lu^@@C~5O34il(0ZEHh%L6e1At27W@>7xr&#?JP!FFU8*U#|PQuXFzY>%Kl* zzlt3RlqGIBHvqtr_$_gX06>l_1hCGIz~o-ca0EC%Ha-dKIK|lXasXUT$H#3<`a)tc z-V|5!0{Wg!Eq{_oJl?cJ5?gtk``!ilZHyerJ?h6`?@3%ge5_MR=&kDb{M*anp~{^; zDSkfTO<}mf(7SKgoj$vdXzE;Pp(Li;{tV`!vvF$)W53L6Yx>RAlJvqc+v({?bz>X) zf0;I~i217c5{|COO}VLP-PM>7E)bd(izhy+Reh*C4#)&Z#KM59Feq^aun)lEf!B7h z^3y1g>>*e+LM@8yj}G{QWxgzLAgV5@2+}mz)TP;4@UF3(L=y9BAoj zMd7?6_>9=Ir#0*DzT%h#=qD_YHqf;TpN5GoH z%~_-a4=0EQ*Bfp-q{A_7*xBvK5QPK`5H{T`H$PFzqh#L(1M;Ct)A$0xIjf0%vX5em`bntLO1V&MIi)o4J-kG|LMt6?jePGDPLN-0 z_S7jm@sFxHBq-GLc4>m*H;%RJ=b43}q7=KivCrf}Ngk|ObA9M}5Y;x%z-b%4&W>(- zlC{8{s^Rac>#NGQ!K~$9^#7UDqck%~YD-BgeBT$M;T@wqAM&PIVH;_2noG?kd2WgY zCu*Knw>u`RFj0!MhRP$Sy+wOXmphWpZw5xEqzx6S@VoC-l>7UL_U7zAXL4tR>a&Ze zHo9hsD_JBIhWt6SD>KVJvzNN!Ar8WR$2QgRA756OIs}boomF8BBLi=aMA9@>+{RE3 z@s!cs#yjQ5T*+-HPkWbF-$LYenW~o}7XChS1ubjwx}>)DBJm1m5uI~KgwbKi!VR~Y zBDI~;LqFmHGjkzb?=IeNIzW*PM={WYY(z-hiHf($gV|wNU?1%4Zca5Is5}J;)*=BU zq+sR|Gk~OTQupZjMC(S-)s%pcqQdR`Li4=5wEblBVQGu?=4nJoVie3XE3SEY1K&rJ z6|z$Qu{68o-uEy3BvHu)6FK^yDv^_!vSDeHa^3s(>Bqu_;%9Xc?bCr6avGo*95g@5Bi0{x%laIDytJC?#Ry5|v9OgG99ZqvRZCcT^-4(`oT Y6ED2$88;Di+ktHmzd0f9QY@?FFEBeW0RR91 literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_SRC_OUT.png b/docs/html/reference/images/graphics/composite_SRC_OUT.png new file mode 100644 index 0000000000000000000000000000000000000000..39c0c1707d15816c6b0d4af48d33b01e73c0696b GIT binary patch literal 2052 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 E8&mhU;s5{u literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/graphics/composite_XOR.png b/docs/html/reference/images/graphics/composite_XOR.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0c5ba147624d03e955a1c64ac15a0b425ca60f GIT binary patch literal 4616 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 *

- * + * *

DCI-P3 vs ProPhoto RGB
*

* @@ -281,7 +281,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

sRGB
*

*/ @@ -308,7 +308,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

sRGB
*

*/ @@ -347,7 +347,7 @@ public abstract class ColorSpace { * Range\([-0.799..2.399[\) * *

- * + * *

Extended sRGB (orange) vs sRGB (white)
*

*/ @@ -374,7 +374,7 @@ public abstract class ColorSpace { * Range\([-0.5..7.499[\) * *

- * + * *

Extended sRGB (orange) vs sRGB (white)
*

*/ @@ -409,7 +409,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

BT.709
*

*/ @@ -444,7 +444,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

BT.2020 (orange) vs sRGB (white)
*

*/ @@ -471,7 +471,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

DCI-P3 (orange) vs sRGB (white)
*

*/ @@ -506,7 +506,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

Display P3 (orange) vs sRGB (white)
*

*/ @@ -541,7 +541,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

NTSC 1953 (orange) vs sRGB (white)
*

*/ @@ -576,7 +576,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

SMPTE-C (orange) vs sRGB (white)
*

*/ @@ -603,7 +603,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

Adobe RGB (orange) vs sRGB (white)
*

*/ @@ -638,7 +638,7 @@ public abstract class ColorSpace { * Range\([0..1]\) * *

- * + * *

ProPhoto RGB (orange) vs sRGB (white)
*

*/ @@ -665,7 +665,7 @@ public abstract class ColorSpace { * Range\([-65504.0, 65504.0]\) * *

- * + * *

ACES (orange) vs sRGB (white)
*

*/ @@ -692,7 +692,7 @@ public abstract class ColorSpace { * Range\([-65504.0, 65504.0]\) * *

- * + * *

ACEScg (orange) vs sRGB (white)
*

*/ @@ -1931,7 +1931,7 @@ public abstract class ColorSpace { * are internally converted to xyY.

* *

- * + * *

sRGB primaries and white point
*

* @@ -1989,7 +1989,7 @@ public abstract class ColorSpace { * the range \([-65504, 65504]\).

* *

- * + * *

Extended sRGB and its large range
*

* @@ -3703,7 +3703,7 @@ public abstract class ColorSpace { * .render(); * *

- * + * *

sRGB vs DCI-P3
*

* @@ -3746,7 +3746,7 @@ public abstract class ColorSpace { * .render(); * *

- * + * *

Clipping disabled
*

* @@ -3759,7 +3759,7 @@ public abstract class ColorSpace { * .render(); * *

- * + * *

Clipping enabled
*

* @@ -3789,7 +3789,7 @@ public abstract class ColorSpace { * .render(); * *

- * + * *

CIE 1976 UCS diagram
*

* @@ -3847,7 +3847,7 @@ public abstract class ColorSpace { * .render(); * *

- * + * *

sRGB vs DCI-P3
*

* @@ -3863,7 +3863,7 @@ public abstract class ColorSpace { * .render(); * *

- * + * *

sRGB, DCI-P3, ACES and scRGB
*

* @@ -3901,7 +3901,7 @@ public abstract class ColorSpace { * .render(); * *

- * + * *

* Locating colors on the chromaticity diagram *
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java index f4bf0798ad182..c4f7dc39b4bd9 100644 --- a/graphics/java/android/graphics/Paint.java +++ b/graphics/java/android/graphics/Paint.java @@ -1067,19 +1067,23 @@ public class Paint { } /** - * Get the paint's xfermode object. + * Get the paint's transfer mode object. * - * @return the paint's xfermode (or null) + * @return the paint's transfer mode (or null) */ public Xfermode getXfermode() { return mXfermode; } /** - * Set or clear the xfermode object. + * Set or clear the transfer mode object. A transfer mode defines how + * source pixels (generate by a drawing command) are composited with + * the destination pixels (content of the render target). *

- * Pass null to clear any previous xfermode. + * Pass null to clear any previous transfer mode. * As a convenience, the parameter passed is also returned. + *

+ * {@link PorterDuffXfermode} is the most common transfer mode. * * @param xfermode May be null. The xfermode to be installed in the paint * @return xfermode diff --git a/graphics/java/android/graphics/PorterDuff.java b/graphics/java/android/graphics/PorterDuff.java index 2bbbff309414d..d7d3049b0efa8 100644 --- a/graphics/java/android/graphics/PorterDuff.java +++ b/graphics/java/android/graphics/PorterDuff.java @@ -16,46 +16,345 @@ package android.graphics; +/** + *

This class contains the list of alpha compositing and blending modes + * that can be passed to {@link PorterDuffXfermode}, a specialized implementation + * of {@link Paint}'s {@link Paint#setXfermode(Xfermode) transfer mode}. + * All the available modes can be found in the {@link Mode} enum.

+ */ public class PorterDuff { + /** + * {@usesMathJax} + * + *

Porter-Duff

+ * + *

The name of the parent class is an homage to the work of Thomas Porter and + * Tom Duff, presented in their seminal 1984 paper titled "Compositing Digital Images". + * In this paper, the authors describe 12 compositing operators that govern how to + * compute the color resulting of the composition of a source (the graphics object + * to render) with a destination (the content of the render target).

+ * + *

"Compositing Digital Images" was published in Computer Graphics + * Volume 18, Number 3 dated July 1984.

+ * + *

Because the work of Porter and Duff focuses solely on the effects of the alpha + * channel of the source and destination, the 12 operators described in the original + * paper are called alpha compositing modes here.

+ * + *

For convenience, this class also provides several blending modes, which similarly + * define the result of compositing a source and a destination but without being + * constrained to the alpha channel. These blending modes are not defined by Porter + * and Duff but have been included in this class for convenience purposes.

+ * + *

Diagrams

+ * + *

All the example diagrams presented below use the same source and destination + * images:

+ * + * + * + * + * + * + *
+ * + *
Source image
+ *
+ * + *
Destination image
+ *
+ * + *

The order of drawing operations used to generate each diagram is shown in the + * following code snippet:

+ * + *
+     * Paint paint = new Paint();
+     * canvas.drawBitmap(destinationImage, 0, 0, paint);
+     *
+     * PorterDuff.Mode mode = // choose a mode
+     * paint.setXfermode(new PorterDuffXfermode(mode));
+     *
+     * canvas.drawBitmap(sourceImage, 0, 0, paint);
+     * 
- // these value must match their native equivalents. See SkXfermode.h + * + *

Alpha compositing modes

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
+ * + *
{@link #SRC Source}
+ *
+ * + *
{@link #SRC_OVER Source Over}
+ *
+ * + *
{@link #SRC_IN Source In}
+ *
+ * + *
{@link #SRC_ATOP Source Atop}
+ *
+ * + *
{@link #DST Destination}
+ *
+ * + *
{@link #DST_OVER Destination Over}
+ *
+ * + *
{@link #DST_IN Destination In}
+ *
+ * + *
{@link #DST_ATOP Destination Atop}
+ *
+ * + *
{@link #CLEAR Clear}
+ *
+ * + *
{@link #SRC_OUT Source Out}
+ *
+ * + *
{@link #DST_OUT Destination Out}
+ *
+ * + *
{@link #XOR Exclusive Or}
+ *
+ * + *

Blending modes

+ * + * + * + * + * + * + * + * + * + * + * + *
+ * + *
{@link #DARKEN Darken}
+ *
+ * + *
{@link #LIGHTEN Lighten}
+ *
+ * + *
{@link #MULTIPLY Multiply}
+ *
+ * + *
{@link #SCREEN Screen}
+ *
+ * + *
{@link #OVERLAY Overlay}
+ *
+ * + *

Compositing equations

+ * + *

The documentation of each individual alpha compositing or blending mode below + * provides the exact equation used to compute alpha and color value of the result + * of the composition of a source and destination.

+ * + *

The result (or output) alpha value is noted \(\alpha_{out}\). The result (or output) + * color value is noted \(C_{out}\).

+ */ public enum Mode { - /** [0, 0] */ + // these value must match their native equivalents. See SkXfermode.h + /** + *

+ * + *

Destination pixels covered by the source are cleared to 0.
+ *

+ *

\(\alpha_{out} = 0\)

+ *

\(C_{out} = 0\)

+ */ CLEAR (0), - /** [Sa, Sc] */ + /** + *

+ * + *

The source pixels replace the destination pixels.
+ *

+ *

\(\alpha_{out} = \alpha_{src}\)

+ *

\(C_{out} = C_{src}\)

+ */ SRC (1), - /** [Da, Dc] */ + /** + *

+ * + *

The source pixels are discarded, leaving the destination intact.
+ *

+ *

\(\alpha_{out} = \alpha_{dst}\)

+ *

\(C_{out} = C_{dst}\)

+ */ DST (2), - /** [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] */ + /** + *

+ * + *

The source pixels are drawn over the destination pixels.
+ *

+ *

\(\alpha_{out} = \alpha_{src} + (1 - \alpha_{src}) * \alpha_{dst}\)

+ *

\(C_{out} = C_{src} + (1 - \alpha_{src}) * C_{dst}\)

+ */ SRC_OVER (3), - /** [Sa + (1 - Sa)*Da, Rc = Dc + (1 - Da)*Sc] */ + /** + *

+ * + *

The source pixels are drawn behind the destination pixels.
+ *

+ *

\(\alpha_{out} = \alpha_{dst} + (1 - \alpha_{dst}) * \alpha_{src}\)

+ *

\(C_{out} = C_{dst} + (1 - \alpha_{dst}) * C_{src}\)

+ */ DST_OVER (4), - /** [Sa * Da, Sc * Da] */ + /** + *

+ * + *

Keeps the source pixels that cover the destination pixels, + * discards the remaining source and destination pixels.
+ *

+ *

\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)

+ *

\(C_{out} = C_{src} * \alpha_{dst}\)

+ */ SRC_IN (5), - /** [Sa * Da, Sa * Dc] */ + /** + *

+ * + *

Keeps the destination pixels that cover source pixels, + * discards the remaining source and destination pixels.
+ *

+ *

\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)

+ *

\(C_{out} = C_{dst} * \alpha_{src}\)

+ */ DST_IN (6), - /** [Sa * (1 - Da), Sc * (1 - Da)] */ + /** + *

+ * + *

Keeps the source pixels that do not cover destination pixels. + * Discards source pixels that cover destination pixels. Discards all + * destination pixels.
+ *

+ *

\(\alpha_{out} = (1 - \alpha_{dst}) * \alpha_{src}\)

+ *

\(C_{out} = (1 - \alpha_{dst}) * C_{src}\)

+ */ SRC_OUT (7), - /** [Da * (1 - Sa), Dc * (1 - Sa)] */ + /** + *

+ * + *

Keeps the destination pixels that are not covered by source pixels. + * Discards destination pixels that are covered by source pixels. Discards all + * source pixels.
+ *

+ *

\(\alpha_{out} = (1 - \alpha_{src}) * \alpha_{dst}\)

+ *

\(C_{out} = (1 - \alpha_{src}) * C_{dst}\)

+ */ DST_OUT (8), - /** [Da, Sc * Da + (1 - Sa) * Dc] */ + /** + *

+ * + *

Discards the source pixels that do not cover destination pixels. + * Draws remaining source pixels over destination pixels.
+ *

+ *

\(\alpha_{out} = \alpha_{dst}\)

+ *

\(C_{out} = \alpha_{dst} * C_{src} + (1 - \alpha_{src}) * C_{dst}\)

+ */ SRC_ATOP (9), - /** [Sa, Sa * Dc + Sc * (1 - Da)] */ + /** + *

+ * + *

Discards the destination pixels that are not covered by source pixels. + * Draws remaining destination pixels over source pixels.
+ *

+ *

\(\alpha_{out} = \alpha_{src}\)

+ *

\(C_{out} = \alpha_{src} * C_{dst} + (1 - \alpha_{dst}) * C_{src}\)

+ */ DST_ATOP (10), - /** [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc] */ + /** + *

+ * + *

Discards the source and destination pixels where source pixels + * cover destination pixels. Draws remaining source pixels.
+ *

+ *

\(\alpha_{out} = (1 - \alpha_{dst}) * \alpha_{src} + (1 - \alpha_{src}) * \alpha_{dst}\)

+ *

\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst}\)

+ */ XOR (11), - /** [Sa + Da - Sa*Da, - Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)] */ + /** + *

+ * + *

Retains the smallest component of the source and + * destination pixels.
+ *

+ *

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

+ *

\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst} + min(C_{src}, C_{dst})\)

+ */ DARKEN (16), - /** [Sa + Da - Sa*Da, - Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)] */ + /** + *

+ * + *

Retains the largest component of the source and + * destination pixel.
+ *

+ *

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

+ *

\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst} + max(C_{src}, C_{dst})\)

+ */ LIGHTEN (17), - /** [Sa * Da, Sc * Dc] */ + /** + *

+ * + *

Multiplies the source and destination pixels.
+ *

+ *

\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)

+ *

\(C_{out} = C_{src} * C_{dst}\)

+ */ MULTIPLY (13), - /** [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] */ + /** + *

+ * + *

Adds the source and destination pixels, then subtracts the + * source pixels multiplied by the destination.
+ *

+ *

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

+ *

\(C_{out} = C_{src} + C_{dst} - C_{src} * C_{dst}\)

+ */ SCREEN (14), - /** Saturate(S + D) */ + /** + *

+ * + *

Adds the source pixels to the destination pixels and saturates + * the result.
+ *

+ *

\(\alpha_{out} = max(0, min(\alpha_{src} + \alpha_{dst}, 1))\)

+ *

\(C_{out} = max(0, min(C_{src} + C_{dst}, 1))\)

+ */ ADD (12), + /** + *

+ * + *

Multiplies or screens the source and destination depending on the + * destination color.
+ *

+ *

\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)

+ *

\(\begin{equation} + * C_{out} = \begin{cases} 2 * C_{src} * C_{dst} & 2 * C_{dst} \lt \alpha_{dst} \\ + * \alpha_{src} * \alpha_{dst} - 2 (\alpha_{dst} - C_{src}) (\alpha_{src} - C_{dst}) & otherwise \end{cases} + * \end{equation}\)

+ */ OVERLAY (15); Mode(int nativeInt) { @@ -71,14 +370,14 @@ public class PorterDuff { /** * @hide */ - public static final int modeToInt(Mode mode) { + public static int modeToInt(Mode mode) { return mode.nativeInt; } /** * @hide */ - public static final Mode intToMode(int val) { + public static Mode intToMode(int val) { switch (val) { default: case 0: return Mode.CLEAR; diff --git a/graphics/java/android/graphics/PorterDuffXfermode.java b/graphics/java/android/graphics/PorterDuffXfermode.java index 51044103003b2..84d953de91db9 100644 --- a/graphics/java/android/graphics/PorterDuffXfermode.java +++ b/graphics/java/android/graphics/PorterDuffXfermode.java @@ -16,6 +16,12 @@ package android.graphics; +/** + *

Specialized implementation of {@link Paint}'s + * {@link Paint#setXfermode(Xfermode) transfer mode}. Refer to the + * documentation of the {@link PorterDuff.Mode} enum for more + * information on the available alpha compositing and blending modes.

+ */ public class PorterDuffXfermode extends Xfermode { /** * Create an xfermode that uses the specified porter-duff mode.