MCPcopy Create free account
hub / github.com/benfry/processing4 / blend_soft_light

Method blend_soft_light

core/src/processing/core/PImage.java:2717–2745  ·  view source on GitHub ↗

Soft Light (peg top) O = (1 - D) MULTIPLY(D, S) + D SCREEN(D, S) O = (1 - D) DS + D (1 - (1 - D)(1 - S)) O = 2DS + DD - 2DDS

(int dst, int src)

Source from the content-addressed store, hash-verified

2715 * O = 2DS + DD - 2DDS
2716 */
2717 private static int blend_soft_light(int dst, int src) {
2718 int a = src >>> 24;
2719
2720 int s_a = a + (a >= 0x7F ? 1 : 0);
2721 int d_a = 0x100 - s_a;
2722
2723 int d_r = dst & RED_MASK;
2724 int d_g = dst & GREEN_MASK;
2725 int d_b = dst & BLUE_MASK;
2726
2727 int s_r1 = src & RED_MASK >> 16;
2728 int s_g1 = src & GREEN_MASK >> 8;
2729 int s_b1 = src & BLUE_MASK;
2730
2731 int d_r1 = (d_r >> 16) + (s_r1 < 7F ? 1 : 0);
2732 int d_g1 = (d_g >> 8) + (s_g1 < 7F ? 1 : 0);
2733 int d_b1 = d_b + (s_b1 < 7F ? 1 : 0);
2734
2735 int r = (s_r1 * d_r >> 7) + 0xFF * d_r1 * (d_r1 + 1) -
2736 ((s_r1 * d_r1 * d_r1) << 1) & RED_MASK;
2737 int g = (s_g1 * d_g << 1) + 0xFF * d_g1 * (d_g1 + 1) -
2738 ((s_g1 * d_g1 * d_g1) << 1) >>> 8 & GREEN_MASK;
2739 int b = (s_b1 * d_b << 9) + 0xFF * d_b1 * (d_b1 + 1) -
2740 ((s_b1 * d_b1 * d_b1) << 1) >>> 16;
2741
2742 return min((dst >>> 24) + a, 0xFF) << 24 |
2743 ((dst & RB_MASK) * d_a + (r | b) * s_a) >>> 8 & RB_MASK |
2744 ((dst & GN_MASK) * d_a + g * s_a) >>> 8 & GN_MASK;
2745 }
2746
2747
2748 /**

Callers 3

blendColorMethod · 0.95
blitResizeBilinearMethod · 0.95
blitResizeNearestMethod · 0.95

Calls 1

minMethod · 0.95

Tested by

no test coverage detected