-/*
-source
-x = porter duff operator
-g = good guy
-a = android
-* = hv 4.6.1
-
-cin 5.1 overlayframe TRANSFER_MODEs
-x DST [Da, Dc]
-x DST_ATOP [Sa, Sc * (1 - Da) + Dc * Sa]
-x DST_IN [Da * Sa, Dc * Sa]
-x DST_OUT [Da * (1 - Sa), Dc * (1 - Sa)]
-x DST_OVER [Sa * (1 - Da) + Da, Sc * (1 - Da) + Dc]
-x SRC [Sa, Sc]
-x SRC_ATOP [Da, Sc * Da + Dc * (1 - Sa)]
-x SRC_IN [Sa * Da, Sc * Da]
-x SRC_OUT [Sa * (1 - Da), Sc * (1 - Da)]
-x SRC_OVER [Sa + Da * (1 - Sa), Sc + (1 - Sa) * Dc]
-g OR [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]
-a XOR [Sa * (1 - Da) + Da * (1 - Sa), Sc * (1 - Da) + Dc * (1 Sa)]
-* NORMAL [Sa + Da * (1 - Sa), Sc * Sa + Dc * (1 Sa)])
-* ADDITION [(Sa + Da), (Sc + Dc)]
-* SUBTRACT [(Sa - Da), (Sc Dc)]
-* MULTIPLY [(Sa * Da), Sc * Dc]
-* DIVIDE [(Sa / Da), (Sc / Dc)]
-* REPLACE [Sa, Sc] (fade = 1)
-* MAX [max(Sa, Da), MAX(Sc, Dc)]
-* MIN [min(Sa, Da), MIN(Sc, Dc)]
-g AVERAGE [(Sa + Da) * 0.5, (Sc + Dc) * 0.5]
-a DARKEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)]
-a LIGHTEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)]
-
-https://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
- ADD Saturate(S + D)
- CLEAR [0, 0]
- DARKEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)]
- DST [Da, Dc]
- DST_ATOP [Sa, Sa * Dc + Sc * (1 - Da)]
- DST_IN [Sa * Da, Sa * Dc]
- DST_OUT [Da * (1 - Sa), Dc * (1 - Sa)]
- DST_OVER [Sa + (1 - Sa)*Da, Rc = Dc + (1 - Da)*Sc]
- LIGHTEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)]
- MULTIPLY [Sa * Da, Sc * Dc]
- OVERLAY (defined, but unspecified in android)
- SCREEN [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]
- SRC [Sa, Sc]
- SRC_ATOP [Da, Sc * Da + (1 - Sa) * Dc]
- SRC_IN [Sa * Da, Sc * Da]
- SRC_OUT [Sa * (1 - Da), Sc * (1 - Da)]
- SRC_OVER [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc]
- XOR [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc]
-
-https://docs.gimp.org/2.6/en/gimp-concepts-layer-modes.html
- Normal [M]
- Dissolve [I + dots]
- Multiply [M * I]
- Divide [I / M]
- Screen [1 - (1-M)*(1-I)]
- Overlay [I * (I + 2*M*(1-I))]
- Dodge [I / (1-M)]
- Burn [1 - (1-I) / M]
- Hard light [M>0.5 ? (1 - (1-2*(M-0.5))*(1 - I) : 2*M*I]
- Soft light [((1-I)*M + Screen()) * I]
- Grain extract [I - M + 0.5]
- Grain merge [I + M - 0.5]
- Difference [abs(I-M)]
- Addition [min((I+M),1.0)]
- Subtract [max((I-M),0.0)]
- Darken only [min(M,I)]
- Lighten only [max(M,I)]
- Hue [hue(M) + sat(I)+val(I)]
- Saturation [sat(M) + hue(I)+val(I)]
- Color [hue(M)+sat(M) + val(I)]
- Value [val(M) + sat(I)+hue(I)]
-
-*/
-
-#define TRANSFER_TYPES 23