1 | /* |
---|---|
2 | * Copyright 2011 Google Inc. |
3 | * |
4 | * Use of this source code is governed by a BSD-style license that can be |
5 | * found in the LICENSE file. |
6 | */ |
7 | |
8 | #include "include/effects/SkColorMatrixFilter.h" |
9 | |
10 | static SkScalar byte_to_unit_float(U8CPU byte) { |
11 | if (0xFF == byte) { |
12 | // want to get this exact |
13 | return 1; |
14 | } else { |
15 | return byte * 0.00392156862745f; |
16 | } |
17 | } |
18 | |
19 | sk_sp<SkColorFilter> SkColorMatrixFilter::MakeLightingFilter(SkColor mul, SkColor add) { |
20 | const SkColor opaqueAlphaMask = SK_ColorBLACK; |
21 | // omit the alpha and compare only the RGB values |
22 | if (0 == (add & ~opaqueAlphaMask)) { |
23 | return SkColorFilters::Blend(mul | opaqueAlphaMask, SkBlendMode::kModulate); |
24 | } |
25 | |
26 | SkColorMatrix matrix; |
27 | matrix.setScale(byte_to_unit_float(SkColorGetR(mul)), |
28 | byte_to_unit_float(SkColorGetG(mul)), |
29 | byte_to_unit_float(SkColorGetB(mul)), |
30 | 1); |
31 | matrix.postTranslate(byte_to_unit_float(SkColorGetR(add)), |
32 | byte_to_unit_float(SkColorGetG(add)), |
33 | byte_to_unit_float(SkColorGetB(add)), |
34 | 0); |
35 | return SkColorFilters::Matrix(matrix); |
36 | } |
37 |