123456789101112131415161718192021222324252627282930313233343536 |
- /*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "include/effects/SkColorMatrixFilter.h"
- static SkScalar byte_to_unit_float(U8CPU byte) {
- if (0xFF == byte) {
- // want to get this exact
- return 1;
- } else {
- return byte * 0.00392156862745f;
- }
- }
- sk_sp<SkColorFilter> SkColorMatrixFilter::MakeLightingFilter(SkColor mul, SkColor add) {
- const SkColor opaqueAlphaMask = SK_ColorBLACK;
- // omit the alpha and compare only the RGB values
- if (0 == (add & ~opaqueAlphaMask)) {
- return SkColorFilters::Blend(mul | opaqueAlphaMask, SkBlendMode::kModulate);
- }
- SkColorMatrix matrix;
- matrix.setScale(byte_to_unit_float(SkColorGetR(mul)),
- byte_to_unit_float(SkColorGetG(mul)),
- byte_to_unit_float(SkColorGetB(mul)),
- 1);
- matrix.postTranslate(byte_to_unit_float(SkColorGetR(add)),
- byte_to_unit_float(SkColorGetG(add)),
- byte_to_unit_float(SkColorGetB(add)),
- 0);
- return SkColorFilters::Matrix(matrix);
- }
|