Soft Light (Pegtop) 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)
| 2861 | * O = 2DS + DD - 2DDS |
| 2862 | */ |
| 2863 | private static int blend_soft_light(int dst, int src) { |
| 2864 | int a = src >>> 24; |
| 2865 | |
| 2866 | int s_a = a + (a >= 0x7F ? 1 : 0); |
| 2867 | int d_a = 0x100 - s_a; |
| 2868 | |
| 2869 | int d_r = dst & RED_MASK; |
| 2870 | int d_g = dst & GREEN_MASK; |
| 2871 | int d_b = dst & BLUE_MASK; |
| 2872 | |
| 2873 | int s_r1 = src & RED_MASK >> 16; |
| 2874 | int s_g1 = src & GREEN_MASK >> 8; |
| 2875 | int s_b1 = src & BLUE_MASK; |
| 2876 | |
| 2877 | int d_r1 = (d_r >> 16) + (s_r1 < 7F ? 1 : 0); |
| 2878 | int d_g1 = (d_g >> 8) + (s_g1 < 7F ? 1 : 0); |
| 2879 | int d_b1 = d_b + (s_b1 < 7F ? 1 : 0); |
| 2880 | |
| 2881 | int r = (s_r1 * d_r >> 7) + 0xFF * d_r1 * (d_r1 + 1) - |
| 2882 | ((s_r1 * d_r1 * d_r1) << 1) & RED_MASK; |
| 2883 | int g = (s_g1 * d_g << 1) + 0xFF * d_g1 * (d_g1 + 1) - |
| 2884 | ((s_g1 * d_g1 * d_g1) << 1) >>> 8 & GREEN_MASK; |
| 2885 | int b = (s_b1 * d_b << 9) + 0xFF * d_b1 * (d_b1 + 1) - |
| 2886 | ((s_b1 * d_b1 * d_b1) << 1) >>> 16; |
| 2887 | |
| 2888 | return min((dst >>> 24) + a, 0xFF) << 24 | |
| 2889 | ((dst & RB_MASK) * d_a + (r | b) * s_a) >>> 8 & RB_MASK | |
| 2890 | ((dst & GN_MASK) * d_a + g * s_a) >>> 8 & GN_MASK; |
| 2891 | } |
| 2892 | |
| 2893 | |
| 2894 | /** |
no test coverage detected