blob: 82a6a7e9c8beb545b064ac6888321f34446f8263 [file] [log] [blame]
Dominic Mazzoni394d4142017-02-14 11:15:31 -08001/*
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
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "include/core/SkBitmap.h"
9#include "include/core/SkCanvas.h"
10#include "include/effects/SkHighContrastFilter.h"
11#include "tests/Test.h"
Dominic Mazzoni394d4142017-02-14 11:15:31 -080012
13DEF_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
Dominic Mazzoni394d4142017-02-14 11:15:31 -080037 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 }
Dominic Mazzoni394d4142017-02-14 11:15:31 -080046}
47
Mike Klein4d68c242021-02-19 05:30:45 -060048DEF_TEST(HighContrastFilter_SmokeTest, reporter) {
Dominic Mazzoni394d4142017-02-14 11:15:31 -080049 SkHighContrastConfig config;
50 config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness;
51 sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config);
Mike Klein4d68c242021-02-19 05:30:45 -060052 REPORTER_ASSERT(reporter, filter->isAlphaUnchanged());
Dominic Mazzoni394d4142017-02-14 11:15:31 -080053
54 SkColor white_inverted = filter->filterColor(SK_ColorWHITE);
55 REPORTER_ASSERT(reporter, white_inverted == SK_ColorBLACK);
56
57 SkColor black_inverted = filter->filterColor(SK_ColorBLACK);
58 REPORTER_ASSERT(reporter, black_inverted == SK_ColorWHITE);
59}
60
61DEF_TEST(HighContrastFilter_InvalidInputs, reporter) {
62 SkHighContrastConfig config;
63 REPORTER_ASSERT(reporter, config.isValid());
64
65 // Valid invert style
66 config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertBrightness;
67 REPORTER_ASSERT(reporter, config.isValid());
68 config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertLightness;
69 REPORTER_ASSERT(reporter, config.isValid());
70 sk_sp<SkColorFilter> filter = SkHighContrastFilter::Make(config);
71 REPORTER_ASSERT(reporter, filter);
72
73 // Invalid invert style
74 config.fInvertStyle = static_cast<SkHighContrastConfig::InvertStyle>(999);
75 REPORTER_ASSERT(reporter, !config.isValid());
76 filter = SkHighContrastFilter::Make(config);
77 REPORTER_ASSERT(reporter, !filter);
78
79 // Valid contrast
Mike Klein28698692021-02-12 07:59:55 -060080 for (float contrast : {0.5f, +1.0f, -1.0f}) {
81 config.fInvertStyle = SkHighContrastConfig::InvertStyle::kInvertBrightness;
82 config.fContrast = contrast;
83 REPORTER_ASSERT(reporter, config.isValid());
84 filter = SkHighContrastFilter::Make(config);
85 REPORTER_ASSERT(reporter, filter);
86 }
Dominic Mazzoni394d4142017-02-14 11:15:31 -080087
88 // Invalid contrast
89 config.fContrast = 1.1f;
90 REPORTER_ASSERT(reporter, !config.isValid());
91 filter = SkHighContrastFilter::Make(config);
92 REPORTER_ASSERT(reporter, !filter);
93}