Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Macros | Functions
colorfilterimagefilter.cpp File Reference
#include "gm/gm.h"
#include "include/core/SkBlendMode.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkColor.h"
#include "include/core/SkColorFilter.h"
#include "include/core/SkImage.h"
#include "include/core/SkImageFilter.h"
#include "include/core/SkPaint.h"
#include "include/core/SkPoint.h"
#include "include/core/SkRect.h"
#include "include/core/SkRefCnt.h"
#include "include/core/SkScalar.h"
#include "include/core/SkShader.h"
#include "include/core/SkTileMode.h"
#include "include/effects/SkColorMatrix.h"
#include "include/effects/SkGradientShader.h"
#include "include/effects/SkImageFilters.h"
#include "include/private/base/SkTArray.h"
#include "include/private/base/SkTDArray.h"
#include "tools/DecodeUtils.h"
#include "tools/Resources.h"
#include <string.h>
#include <utility>

Go to the source code of this file.

Macros

#define FILTER_WIDTH   SkIntToScalar(30)
 
#define FILTER_HEIGHT   SkIntToScalar(30)
 
#define MARGIN   SkIntToScalar(10)
 

Functions

static sk_sp< SkColorFiltercf_make_brightness (float brightness)
 
static sk_sp< SkColorFiltercf_make_grayscale ()
 
static sk_sp< SkColorFiltercf_make_colorize (SkColor color)
 
static void sk_gm_get_colorfilters (TArray< sk_sp< SkColorFilter > > *array)
 
static sk_sp< SkShadersh_make_lineargradient0 ()
 
static sk_sp< SkShadersh_make_lineargradient1 ()
 
static sk_sp< SkShadersh_make_image ()
 
static void sk_gm_get_shaders (TArray< sk_sp< SkShader > > *array)
 
static sk_sp< SkImageFiltermake_blur (float amount, sk_sp< SkImageFilter > input)
 
static sk_sp< SkImageFiltermake_brightness (float amount, sk_sp< SkImageFilter > input)
 
static sk_sp< SkImageFiltermake_grayscale (sk_sp< SkImageFilter > input)
 
static sk_sp< SkImageFiltermake_mode_blue (sk_sp< SkImageFilter > input)
 
static void draw_clipped_rect (SkCanvas *canvas, const SkRect &r, const SkPaint &paint, float outset=0.0f)
 
 DEF_SIMPLE_GM (colorfilterimagefilter, canvas, 400, 100)
 
 DEF_SIMPLE_GM (colorfilterimagefilter_layer, canvas, 32, 32)
 
 DEF_SIMPLE_GM (colorfiltershader, canvas, 610, 610)
 

Macro Definition Documentation

◆ FILTER_HEIGHT

#define FILTER_HEIGHT   SkIntToScalar(30)

Definition at line 36 of file colorfilterimagefilter.cpp.

◆ FILTER_WIDTH

#define FILTER_WIDTH   SkIntToScalar(30)

Definition at line 35 of file colorfilterimagefilter.cpp.

◆ MARGIN

#define MARGIN   SkIntToScalar(10)

Definition at line 37 of file colorfilterimagefilter.cpp.

Function Documentation

◆ cf_make_brightness()

static sk_sp< SkColorFilter > cf_make_brightness ( float  brightness)
static

Definition at line 39 of file colorfilterimagefilter.cpp.

39 {
40 float matrix[20] = {
41 1, 0, 0, 0, brightness,
42 0, 1, 0, 0, brightness,
43 0, 0, 1, 0, brightness,
44 0, 0, 0, 1, 0 };
45 return SkColorFilters::Matrix(matrix);
46}
static sk_sp< SkColorFilter > Matrix(const SkColorMatrix &)
unsigned useCenter Optional< SkMatrix > matrix
Definition SkRecords.h:258

◆ cf_make_colorize()

static sk_sp< SkColorFilter > cf_make_colorize ( SkColor  color)
static

Definition at line 58 of file colorfilterimagefilter.cpp.

58 {
60}
SkColor4f color
static sk_sp< SkColorFilter > Blend(const SkColor4f &c, sk_sp< SkColorSpace >, SkBlendMode mode)

◆ cf_make_grayscale()

static sk_sp< SkColorFilter > cf_make_grayscale ( )
static

Definition at line 48 of file colorfilterimagefilter.cpp.

48 {
49 float matrix[20];
50 memset(matrix, 0, 20 * sizeof(float));
51 matrix[0] = matrix[5] = matrix[10] = 0.2126f;
52 matrix[1] = matrix[6] = matrix[11] = 0.7152f;
53 matrix[2] = matrix[7] = matrix[12] = 0.0722f;
54 matrix[18] = 1.0f;
55 return SkColorFilters::Matrix(matrix);
56}

◆ DEF_SIMPLE_GM() [1/3]

DEF_SIMPLE_GM ( colorfilterimagefilter  ,
canvas  ,
400  ,
100   
)

Definition at line 132 of file colorfilterimagefilter.cpp.

132 {
135 paint.setColor(SK_ColorRED);
136 canvas->save();
137 for (float brightness = -1.0f; brightness <= 1.0f; brightness += 0.2f) {
138 sk_sp<SkImageFilter> dim(make_brightness(-brightness, nullptr));
139 sk_sp<SkImageFilter> bright(make_brightness(brightness, std::move(dim)));
140 paint.setImageFilter(std::move(bright));
141 draw_clipped_rect(canvas, r, paint);
142 canvas->translate(FILTER_WIDTH + MARGIN, 0);
143 }
144 canvas->restore();
145 canvas->translate(0, FILTER_HEIGHT + MARGIN);
146 {
147 sk_sp<SkImageFilter> brightness(make_brightness(0.9f, nullptr));
148 sk_sp<SkImageFilter> grayscale(make_grayscale(std::move(brightness)));
149 paint.setImageFilter(std::move(grayscale));
150 draw_clipped_rect(canvas, r, paint);
151 canvas->translate(FILTER_WIDTH + MARGIN, 0);
152 }
153 {
154 sk_sp<SkImageFilter> grayscale(make_grayscale(nullptr));
155 sk_sp<SkImageFilter> brightness(make_brightness(0.9f, std::move(grayscale)));
156 paint.setImageFilter(std::move(brightness));
157 draw_clipped_rect(canvas, r, paint);
158 canvas->translate(FILTER_WIDTH + MARGIN, 0);
159 }
160 {
162 sk_sp<SkImageFilter> brightness(make_brightness(1.0f, std::move(blue)));
163 paint.setImageFilter(std::move(brightness));
164 draw_clipped_rect(canvas, r, paint);
165 canvas->translate(FILTER_WIDTH + MARGIN, 0);
166 }
167 {
168 sk_sp<SkImageFilter> brightness(make_brightness(1.0f, nullptr));
169 sk_sp<SkImageFilter> blue(make_mode_blue(std::move(brightness)));
170 paint.setImageFilter(std::move(blue));
171 draw_clipped_rect(canvas, r, paint);
172 canvas->translate(FILTER_WIDTH + MARGIN, 0);
173 }
174 {
175 sk_sp<SkImageFilter> blur(make_blur(3.0f, nullptr));
176 sk_sp<SkImageFilter> brightness(make_brightness(0.5f, std::move(blur)));
177 paint.setImageFilter(std::move(brightness));
178 draw_clipped_rect(canvas, r, paint, 3);
179 canvas->translate(FILTER_WIDTH + MARGIN, 0);
180 }
181 {
183 paint.setImageFilter(std::move(blue));
184 draw_clipped_rect(canvas, r, paint, 5);
185 canvas->translate(FILTER_WIDTH + MARGIN, 0);
186 }
187}
static sk_sp< SkColorFilter > make_grayscale()
constexpr SkColor SK_ColorRED
Definition SkColor.h:126
const Paint & paint
#define FILTER_HEIGHT
#define FILTER_WIDTH
static sk_sp< SkImageFilter > make_mode_blue(sk_sp< SkImageFilter > input)
static void draw_clipped_rect(SkCanvas *canvas, const SkRect &r, const SkPaint &paint, float outset=0.0f)
static sk_sp< SkImageFilter > make_brightness(float amount, sk_sp< SkImageFilter > input)
static sk_sp< SkImageFilter > make_blur(float amount, sk_sp< SkImageFilter > input)
#define MARGIN
static constexpr SkRect MakeWH(float w, float h)
Definition SkRect.h:609

◆ DEF_SIMPLE_GM() [2/3]

DEF_SIMPLE_GM ( colorfilterimagefilter_layer  ,
canvas  ,
32  ,
32   
)

Definition at line 189 of file colorfilterimagefilter.cpp.

189 {
190 SkAutoCanvasRestore autoCanvasRestore(canvas, false);
191 SkColorMatrix cm;
192 cm.setSaturation(0.0f);
194 SkPaint p;
195 p.setImageFilter(SkImageFilters::ColorFilter(std::move(cf), nullptr));
196 canvas->saveLayer(nullptr, &p);
197 canvas->clear(SK_ColorRED);
198}
void setSaturation(float sat)
static sk_sp< SkImageFilter > ColorFilter(sk_sp< SkColorFilter > cf, sk_sp< SkImageFilter > input, const CropRect &cropRect={})

◆ DEF_SIMPLE_GM() [3/3]

DEF_SIMPLE_GM ( colorfiltershader  ,
canvas  ,
610  ,
610   
)

Definition at line 201 of file colorfilterimagefilter.cpp.

201 {
203 sk_gm_get_colorfilters(&filters);
204
205 TArray<sk_sp<SkShader>> shaders;
206 sk_gm_get_shaders(&shaders);
207
208 const SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };
210 {0, 0}, 50, {0, 0}, 150, colors, nullptr, 2, SkTileMode::kClamp));
211
213 SkRect r = SkRect::MakeWH(120, 120);
214
215 canvas->translate(20, 20);
216 for (int y = 0; y < SkToInt(shaders.size()); ++y) {
217 SkShader* shader = shaders[y].get();
218
219 canvas->save();
220 for (int x = -1; x < filters.size(); ++x) {
221 sk_sp<SkColorFilter> filter = x >= 0 ? filters[x] : nullptr;
222
223 paint.setShader(shader->makeWithColorFilter(filter));
224 canvas->drawRect(r, paint);
225 canvas->translate(150, 0);
226 }
227 canvas->restore();
228 canvas->translate(0, 150);
229 }
230}
uint32_t SkColor
Definition SkColor.h:37
constexpr SkColor SK_ColorBLUE
Definition SkColor.h:135
constexpr int SkToInt(S x)
Definition SkTo.h:29
static sk_sp< SkShader > MakeTwoPointConical(const SkPoint &start, SkScalar startRadius, const SkPoint &end, SkScalar endRadius, const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
sk_sp< SkShader > makeWithColorFilter(sk_sp< SkColorFilter >) const
Definition SkShader.cpp:43
int size() const
Definition SkTArray.h:416
static void sk_gm_get_shaders(TArray< sk_sp< SkShader > > *array)
static void sk_gm_get_colorfilters(TArray< sk_sp< SkColorFilter > > *array)
double y
double x
PODArray< SkColor > colors
Definition SkRecords.h:276

◆ draw_clipped_rect()

static void draw_clipped_rect ( SkCanvas canvas,
const SkRect r,
const SkPaint paint,
float  outset = 0.0f 
)
static

Definition at line 120 of file colorfilterimagefilter.cpp.

123 {
124 canvas->save();
125 SkRect clip(r);
126 clip.outset(outset, outset);
127 canvas->clipRect(clip);
128 canvas->drawRect(r, paint);
129 canvas->restore();
130}
static const int outset
Definition BlurTest.cpp:58
static SkPath clip(const SkPath &path, const SkHalfPlane &plane)
Definition SkPath.cpp:3824
void drawRect(const SkRect &rect, const SkPaint &paint)
void clipRect(const SkRect &rect, SkClipOp op, bool doAntiAlias)
void restore()
Definition SkCanvas.cpp:465
int save()
Definition SkCanvas.cpp:451

◆ make_blur()

static sk_sp< SkImageFilter > make_blur ( float  amount,
sk_sp< SkImageFilter input 
)
static

Definition at line 104 of file colorfilterimagefilter.cpp.

104 {
105 return SkImageFilters::Blur(amount, amount, std::move(input));
106}
static sk_sp< SkImageFilter > Blur(SkScalar sigmaX, SkScalar sigmaY, SkTileMode tileMode, sk_sp< SkImageFilter > input, const CropRect &cropRect={})

◆ make_brightness()

static sk_sp< SkImageFilter > make_brightness ( float  amount,
sk_sp< SkImageFilter input 
)
static

Definition at line 108 of file colorfilterimagefilter.cpp.

108 {
109 return SkImageFilters::ColorFilter(cf_make_brightness(amount), std::move(input));
110}
static sk_sp< SkColorFilter > cf_make_brightness(float brightness)

◆ make_grayscale()

static sk_sp< SkImageFilter > make_grayscale ( sk_sp< SkImageFilter input)
static

Definition at line 112 of file colorfilterimagefilter.cpp.

112 {
113 return SkImageFilters::ColorFilter(cf_make_grayscale(), std::move(input));
114}
static sk_sp< SkColorFilter > cf_make_grayscale()

◆ make_mode_blue()

static sk_sp< SkImageFilter > make_mode_blue ( sk_sp< SkImageFilter input)
static

Definition at line 116 of file colorfilterimagefilter.cpp.

116 {
118}
static sk_sp< SkColorFilter > cf_make_colorize(SkColor color)

◆ sh_make_image()

static sk_sp< SkShader > sh_make_image ( )
static

Definition at line 82 of file colorfilterimagefilter.cpp.

82 {
83 sk_sp<SkImage> image(ToolUtils::GetResourceAsImage("images/mandrill_128.png"));
84 if (!image) {
85 return nullptr;
86 }
88}
sk_sp< SkShader > makeShader(SkTileMode tmx, SkTileMode tmy, const SkSamplingOptions &, const SkMatrix *localMatrix=nullptr) const
Definition SkImage.cpp:179
sk_sp< SkImage > image
Definition examples.cpp:29
sk_sp< SkImage > GetResourceAsImage(const char *resource)
Definition DecodeUtils.h:25

◆ sh_make_lineargradient0()

static sk_sp< SkShader > sh_make_lineargradient0 ( )
static

Definition at line 70 of file colorfilterimagefilter.cpp.

70 {
71 const SkPoint pts[] = { { 0, 0 }, { 100, 100 } };
73 return SkGradientShader::MakeLinear(pts, colors, nullptr, 3, SkTileMode::kRepeat);
74}
constexpr SkColor SK_ColorGREEN
Definition SkColor.h:131
static sk_sp< SkShader > MakeLinear(const SkPoint pts[2], const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)

◆ sh_make_lineargradient1()

static sk_sp< SkShader > sh_make_lineargradient1 ( )
static

Definition at line 76 of file colorfilterimagefilter.cpp.

76 {
77 const SkPoint pts[] = { { 0, 0 }, { 100, 100 } };
78 const SkColor colors[] = { SK_ColorRED, 0x0000FF00, SK_ColorBLUE };
79 return SkGradientShader::MakeLinear(pts, colors, nullptr, 3, SkTileMode::kRepeat);
80}

◆ sk_gm_get_colorfilters()

static void sk_gm_get_colorfilters ( TArray< sk_sp< SkColorFilter > > *  array)
static

Definition at line 62 of file colorfilterimagefilter.cpp.

62 {
63 array->push_back(cf_make_brightness(0.5f));
66}

◆ sk_gm_get_shaders()

static void sk_gm_get_shaders ( TArray< sk_sp< SkShader > > *  array)
static

Definition at line 90 of file colorfilterimagefilter.cpp.

90 {
91 if (auto shader = sh_make_lineargradient0()) {
92 array->push_back(std::move(shader));
93 }
94 if (auto shader = sh_make_lineargradient1()) {
95 array->push_back(std::move(shader));
96 }
97 if (auto shader = sh_make_image()) {
98 array->push_back(std::move(shader));
99 }
100}
static sk_sp< SkShader > sh_make_lineargradient1()
static sk_sp< SkShader > sh_make_image()
static sk_sp< SkShader > sh_make_lineargradient0()