/* * 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 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); }