SkColorMatrixFilter.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  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. #include "include/effects/SkColorMatrixFilter.h"
  8. static SkScalar byte_to_unit_float(U8CPU byte) {
  9. if (0xFF == byte) {
  10. // want to get this exact
  11. return 1;
  12. } else {
  13. return byte * 0.00392156862745f;
  14. }
  15. }
  16. sk_sp<SkColorFilter> SkColorMatrixFilter::MakeLightingFilter(SkColor mul, SkColor add) {
  17. const SkColor opaqueAlphaMask = SK_ColorBLACK;
  18. // omit the alpha and compare only the RGB values
  19. if (0 == (add & ~opaqueAlphaMask)) {
  20. return SkColorFilters::Blend(mul | opaqueAlphaMask, SkBlendMode::kModulate);
  21. }
  22. SkColorMatrix matrix;
  23. matrix.setScale(byte_to_unit_float(SkColorGetR(mul)),
  24. byte_to_unit_float(SkColorGetG(mul)),
  25. byte_to_unit_float(SkColorGetB(mul)),
  26. 1);
  27. matrix.postTranslate(byte_to_unit_float(SkColorGetR(add)),
  28. byte_to_unit_float(SkColorGetG(add)),
  29. byte_to_unit_float(SkColorGetB(add)),
  30. 0);
  31. return SkColorFilters::Matrix(matrix);
  32. }