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

Method blend_screen

core/src/processing/core/PImage.java:2611–2635  ·  view source on GitHub ↗

Screen O = 1 - (1 - D)(1 - S) O = D + S - DS

(int dst, int src)

Source from the content-addressed store, hash-verified

2609 * O = D + S - DS
2610 */
2611 private static int blend_screen(int dst, int src) {
2612 int a = src >>> 24;
2613
2614 int s_a = a + (a >= 0x7F ? 1 : 0);
2615 int d_a = 0x100 - s_a;
2616
2617 int d_rb = dst & RB_MASK;
2618 int d_gn = dst & GN_MASK;
2619
2620 int s_gn = src & GN_MASK;
2621
2622 int f_r = (dst & RED_MASK) >> 16;
2623 int f_b = (dst & BLUE_MASK);
2624
2625 int rb_sub =
2626 ((src & RED_MASK) * (f_r + 1) |
2627 (src & BLUE_MASK) * (f_b + 1))
2628 >>> 8 & RB_MASK;
2629 int gn_sub = s_gn * (d_gn + 0x100)
2630 >>> 16 & GN_MASK;
2631
2632 return min((dst >>> 24) + a, 0xFF) << 24 |
2633 (d_rb * d_a + (d_rb + (src & RB_MASK) - rb_sub) * s_a) >>> 8 & RB_MASK |
2634 (d_gn * d_a + (d_gn + s_gn - gn_sub) * s_a) >>> 8 & GN_MASK;
2635 }
2636
2637
2638 /**

Callers 3

blendColorMethod · 0.95
blitResizeBilinearMethod · 0.95
blitResizeNearestMethod · 0.95

Calls 1

minMethod · 0.95

Tested by

no test coverage detected