Exclusion O = (1 - S)D + S(1 - D) O = D + S - 2DS
(int dst, int src)
| 2695 | * O = D + S - 2DS |
| 2696 | */ |
| 2697 | private static int blend_exclusion(int dst, int src) { |
| 2698 | int a = src >>> 24; |
| 2699 | |
| 2700 | int s_a = a + (a >= 0x7F ? 1 : 0); |
| 2701 | int d_a = 0x100 - s_a; |
| 2702 | |
| 2703 | int d_rb = dst & RB_MASK; |
| 2704 | int d_gn = dst & GN_MASK; |
| 2705 | |
| 2706 | int s_gn = src & GN_MASK; |
| 2707 | |
| 2708 | int f_r = (dst & RED_MASK) >> 16; |
| 2709 | int f_b = (dst & BLUE_MASK); |
| 2710 | |
| 2711 | int rb_sub = |
| 2712 | ((src & RED_MASK) * (f_r + (f_r >= 0x7F ? 1 : 0)) | |
| 2713 | (src & BLUE_MASK) * (f_b + (f_b >= 0x7F ? 1 : 0))) |
| 2714 | >>> 7 & 0x01FF01FF; |
| 2715 | int gn_sub = s_gn * (d_gn + (d_gn >= 0x7F00 ? 0x100 : 0)) |
| 2716 | >>> 15 & 0x0001FF00; |
| 2717 | |
| 2718 | return min((dst >>> 24) + a, 0xFF) << 24 | |
| 2719 | (d_rb * d_a + (d_rb + (src & RB_MASK) - rb_sub) * s_a) >>> 8 & RB_MASK | |
| 2720 | (d_gn * d_a + (d_gn + s_gn - gn_sub) * s_a) >>> 8 & GN_MASK; |
| 2721 | } |
| 2722 | |
| 2723 | |
| 2724 | /* |
no test coverage detected