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 byte_to_unit_float(U8CPU byte)10static 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 MakeLightingFilter(SkColor mul,SkColor add)19sk_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