OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef SkColorPriv_DEFINED | 8 #ifndef SkColorPriv_DEFINED |
9 #define SkColorPriv_DEFINED | 9 #define SkColorPriv_DEFINED |
10 | 10 |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 | 174 |
175 In debugging, asserts that alpha is 0..255 | 175 In debugging, asserts that alpha is 0..255 |
176 */ | 176 */ |
177 static inline unsigned SkAlpha255To256(U8CPU alpha) { | 177 static inline unsigned SkAlpha255To256(U8CPU alpha) { |
178 SkASSERT(SkToU8(alpha) == alpha); | 178 SkASSERT(SkToU8(alpha) == alpha); |
179 // this one assues that blending on top of an opaque dst keeps it that way | 179 // this one assues that blending on top of an opaque dst keeps it that way |
180 // even though it is less accurate than a+(a>>7) for non-opaque dsts | 180 // even though it is less accurate than a+(a>>7) for non-opaque dsts |
181 return alpha + 1; | 181 return alpha + 1; |
182 } | 182 } |
183 | 183 |
| 184 /** |
| 185 * Turn a 0..255 value into a 0..256 value, rounding up if the value is >= 0x80
. |
| 186 * This is slightly more accurate than SkAlpha255To256. |
| 187 */ |
| 188 static inline unsigned Sk255To256(U8CPU value) { |
| 189 SkASSERT(SkToU8(value) == value); |
| 190 return value + (value >> 7); |
| 191 } |
| 192 |
184 /** Multiplify value by 0..256, and shift the result down 8 | 193 /** Multiplify value by 0..256, and shift the result down 8 |
185 (i.e. return (value * alpha256) >> 8) | 194 (i.e. return (value * alpha256) >> 8) |
186 */ | 195 */ |
187 #define SkAlphaMul(value, alpha256) (SkMulS16(value, alpha256) >> 8) | 196 #define SkAlphaMul(value, alpha256) (SkMulS16(value, alpha256) >> 8) |
188 | 197 |
189 // The caller may want negative values, so keep all params signed (int) | 198 // The caller may want negative values, so keep all params signed (int) |
190 // so we don't accidentally slip into unsigned math and lose the sign | 199 // so we don't accidentally slip into unsigned math and lose the sign |
191 // extension when we shift (in SkAlphaMul) | 200 // extension when we shift (in SkAlphaMul) |
192 static inline int SkAlphaBlend(int src, int dst, int scale256) { | 201 static inline int SkAlphaBlend(int src, int dst, int scale256) { |
193 SkASSERT((unsigned)scale256 <= 256); | 202 SkASSERT((unsigned)scale256 <= 256); |
(...skipping 849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1043 int srcG = SkColorGetG(src); | 1052 int srcG = SkColorGetG(src); |
1044 int srcB = SkColorGetB(src); | 1053 int srcB = SkColorGetB(src); |
1045 | 1054 |
1046 for (int i = 0; i < width; i++) { | 1055 for (int i = 0; i < width; i++) { |
1047 dst[i] = SkBlendLCD16Opaque(srcR, srcG, srcB, dst[i], mask[i], | 1056 dst[i] = SkBlendLCD16Opaque(srcR, srcG, srcB, dst[i], mask[i], |
1048 opaqueDst); | 1057 opaqueDst); |
1049 } | 1058 } |
1050 } | 1059 } |
1051 | 1060 |
1052 #endif | 1061 #endif |
OLD | NEW |