1 /* 2 * Copyright 2017 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 "SkBitmap.h" 9 #include "SkCanvas.h" 10 #include "SkHighContrastFilter.h" 11 #include "Test.h" 12 13 DEF_TEST(HighContrastFilter_FilterImage, reporter) { 14 SkHighContrastConfig config; 15 config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness; 16 17 int w = 10, h = 10; 18 SkBitmap filterResult, paintResult; 19 20 filterResult.allocN32Pixels(w, h); 21 SkCanvas canvasFilter(filterResult); 22 canvasFilter.clear(0x00000000); 23 24 paintResult.allocN32Pixels(w, h); 25 SkCanvas canvasPaint(paintResult); 26 canvasPaint.clear(0x00000000); 27 28 SkPaint paint; 29 paint.setColor(SK_ColorBLUE); 30 SkRect r = SkRect::MakeLTRB(SkIntToScalar(2), SkIntToScalar(2), 31 SkIntToScalar(8), SkIntToScalar(8)); 32 canvasPaint.drawRect(r, paint); 33 34 paint.setColorFilter(SkHighContrastFilter::Make(config)); 35 canvasFilter.drawRect(r, paint); 36 37 for (int y = r.top(); y < r.bottom(); ++y) { 38 for (int x = r.left(); x < r.right(); ++x) { 39 SkColor paintColor = paintResult.getColor(x, y); 40 SkColor filterColor = filterResult.getColor(x, y); 41 REPORTER_ASSERT( 42 reporter, filterColor == 43 paint.getColorFilter()->filterColor(paintColor)); 44 } 45 } 46 } 47 48 DEF_TEST(HighContrastFilter_SanityCheck, reporter) { 49 SkHighContrastConfig config; 50 config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness; 51 sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config); 52 53 SkColor white_inverted = filter->filterColor(SK_ColorWHITE); 54 REPORTER_ASSERT(reporter, white_inverted == SK_ColorBLACK); 55 56 SkColor black_inverted = filter->filterColor(SK_ColorBLACK); 57 REPORTER_ASSERT(reporter, black_inverted == SK_ColorWHITE); 58 } 59 60 DEF_TEST(HighContrastFilter_InvalidInputs, reporter) { 61 SkHighContrastConfig config; 62 REPORTER_ASSERT(reporter, config.isValid()); 63 64 // Valid invert style 65 config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertBrightness; 66 REPORTER_ASSERT(reporter, config.isValid()); 67 config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness; 68 REPORTER_ASSERT(reporter, config.isValid()); 69 sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config); 70 REPORTER_ASSERT(reporter, filter); 71 72 // Invalid invert style 73 config.fInvertStyle = static_cast<SkHighContrastConfig::InvertStyle>(999); 74 REPORTER_ASSERT(reporter, !config.isValid()); 75 filter = SkHighContrastFilter::Make(config); 76 REPORTER_ASSERT(reporter, !filter); 77 78 // Valid contrast 79 config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertBrightness; 80 config.fContrast = 0.5f; 81 REPORTER_ASSERT(reporter, config.isValid()); 82 filter = SkHighContrastFilter::Make(config); 83 REPORTER_ASSERT(reporter, filter); 84 85 // Invalid contrast 86 config.fContrast = 1.1f; 87 REPORTER_ASSERT(reporter, !config.isValid()); 88 filter = SkHighContrastFilter::Make(config); 89 REPORTER_ASSERT(reporter, !filter); 90 } 91