Screen O = 1 - (1 - D)(1 - S) O = D + S - DS
(int dst, int src)
| 2756 | * O = D + S - DS |
| 2757 | */ |
| 2758 | private static int blend_screen(int dst, int src) { |
| 2759 | int a = src >>> 24; |
| 2760 | |
| 2761 | int s_a = a + (a >= 0x7F ? 1 : 0); |
| 2762 | int d_a = 0x100 - s_a; |
| 2763 | |
| 2764 | int d_rb = dst & RB_MASK; |
| 2765 | int d_gn = dst & GN_MASK; |
| 2766 | |
| 2767 | int s_gn = src & GN_MASK; |
| 2768 | |
| 2769 | int f_r = (dst & RED_MASK) >> 16; |
| 2770 | int f_b = (dst & BLUE_MASK); |
| 2771 | |
| 2772 | int rb_sub = |
| 2773 | ((src & RED_MASK) * (f_r + 1) | |
| 2774 | (src & BLUE_MASK) * (f_b + 1)) |
| 2775 | >>> 8 & RB_MASK; |
| 2776 | int gn_sub = s_gn * (d_gn + 0x100) |
| 2777 | >>> 16 & GN_MASK; |
| 2778 | |
| 2779 | return min((dst >>> 24) + a, 0xFF) << 24 | |
| 2780 | (d_rb * d_a + (d_rb + (src & RB_MASK) - rb_sub) * s_a) >>> 8 & RB_MASK | |
| 2781 | (d_gn * d_a + (d_gn + s_gn - gn_sub) * s_a) >>> 8 & GN_MASK; |
| 2782 | } |
| 2783 | |
| 2784 | |
| 2785 | /** |
no test coverage detected