1394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni/* 2394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni * Copyright 2017 Google Inc. 3394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni * 4394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni * Use of this source code is governed by a BSD-style license that can be 5394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni * found in the LICENSE file. 6394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni */ 7394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 8ab244f045a0740fa6106ed21a4e5824cd09f84f3Florin Malita#include "SkBitmap.h" 9394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni#include "SkCanvas.h" 10394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni#include "SkHighContrastFilter.h" 11394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni#include "Test.h" 12394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 13394d414452a5d654731b0b5a3669f8e2420048b3Dominic MazzoniDEF_TEST(HighContrastFilter_FilterImage, reporter) { 14394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkHighContrastConfig config; 15394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness; 16394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 17394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni int w = 10, h = 10; 18394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkBitmap filterResult, paintResult; 19394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 20394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni filterResult.allocN32Pixels(w, h); 21394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkCanvas canvasFilter(filterResult); 22394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni canvasFilter.clear(0x00000000); 23394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 24394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni paintResult.allocN32Pixels(w, h); 25394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkCanvas canvasPaint(paintResult); 26394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni canvasPaint.clear(0x00000000); 27394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 28394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkPaint paint; 29394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni paint.setColor(SK_ColorBLUE); 30394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkRect r = SkRect::MakeLTRB(SkIntToScalar(2), SkIntToScalar(2), 31394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkIntToScalar(8), SkIntToScalar(8)); 32394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni canvasPaint.drawRect(r, paint); 33394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 34394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni paint.setColorFilter(SkHighContrastFilter::Make(config)); 35394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni canvasFilter.drawRect(r, paint); 36394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 37394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni for (int y = r.top(); y < r.bottom(); ++y) { 38394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni for (int x = r.left(); x < r.right(); ++x) { 39394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkColor paintColor = paintResult.getColor(x, y); 40394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkColor filterColor = filterResult.getColor(x, y); 41394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT( 42394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni reporter, filterColor == 43394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni paint.getColorFilter()->filterColor(paintColor)); 44394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni } 45394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni } 46394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni} 47394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 48394d414452a5d654731b0b5a3669f8e2420048b3Dominic MazzoniDEF_TEST(HighContrastFilter_SanityCheck, reporter) { 49394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkHighContrastConfig config; 50394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness; 51394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config); 52394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 53394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkColor white_inverted = filter->filterColor(SK_ColorWHITE); 54394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, white_inverted == SK_ColorBLACK); 55394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 56394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkColor black_inverted = filter->filterColor(SK_ColorBLACK); 57394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, black_inverted == SK_ColorWHITE); 58394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni} 59394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 60394d414452a5d654731b0b5a3669f8e2420048b3Dominic MazzoniDEF_TEST(HighContrastFilter_InvalidInputs, reporter) { 61394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni SkHighContrastConfig config; 62394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, config.isValid()); 63394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 64394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni // Valid invert style 65394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertBrightness; 66394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, config.isValid()); 67394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness; 68394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, config.isValid()); 69394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config); 70394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, filter); 71394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 72394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni // Invalid invert style 73394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni config.fInvertStyle = static_cast<SkHighContrastConfig::InvertStyle>(999); 74394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, !config.isValid()); 75394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni filter = SkHighContrastFilter::Make(config); 76394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, !filter); 77394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 78394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni // Valid contrast 79394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertBrightness; 80394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni config.fContrast = 0.5f; 81394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, config.isValid()); 82394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni filter = SkHighContrastFilter::Make(config); 83394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, filter); 84394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni 85394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni // Invalid contrast 86394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni config.fContrast = 1.1f; 87394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, !config.isValid()); 88394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni filter = SkHighContrastFilter::Make(config); 89394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni REPORTER_ASSERT(reporter, !filter); 90394d414452a5d654731b0b5a3669f8e2420048b3Dominic Mazzoni} 91