Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: gm/spritebitmap.cpp

Issue 1390913005: add applyFilter() to SkImage (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: can't use +[] trick on windows :( Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | include/core/SkDevice.h » ('j') | include/core/SkImage.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "gm.h" 8 #include "gm.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkBlurImageFilter.h" 10 #include "SkBlurImageFilter.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 draw_2_bitmaps(canvas, bm, true, dx, dy); 90 draw_2_bitmaps(canvas, bm, true, dx, dy);
91 dy += bm.height() + 20; 91 dy += bm.height() + 20;
92 draw_2_bitmaps(canvas, bm, true, dx, dy, filter); 92 draw_2_bitmaps(canvas, bm, true, dx, dy, filter);
93 } 93 }
94 94
95 private: 95 private:
96 typedef GM INHERITED; 96 typedef GM INHERITED;
97 }; 97 };
98 DEF_GM( return new SpriteBitmapGM; ) 98 DEF_GM( return new SpriteBitmapGM; )
99 99
100 //////////////////////////////////////////////////////////////////////////////// ///////////////////
101
102 #include "SkColorFilterImageFilter.h"
103 #include "SkModeColorFilter.h"
104 #include "SkMorphologyImageFilter.h"
105 #include "SkOffsetImageFilter.h"
106
107 static SkImage* make_image(SkCanvas* rootCanvas) {
108 SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100);
109 SkAutoTUnref<SkSurface> surface(rootCanvas->newSurface(info));
110 if (!surface) {
111 surface.reset(SkSurface::NewRaster(info));
112 }
113
114 SkPaint paint;
115 paint.setAntiAlias(true);
116 paint.setColor(SK_ColorRED);
117 surface->getCanvas()->drawCircle(50, 50, 50, paint);
118 return surface->newImageSnapshot();
119 }
120
121 static void show_image(SkCanvas* canvas, SkImage* image, const SkIPoint& offset) {
122 SkScalar x = SkIntToScalar(offset.x());
123 SkScalar y = SkIntToScalar(offset.y());
124
125 SkPaint paint;
robertphillips 2015/10/12 16:43:32 sk_tool_utils::color_to_565 ?
reed1 2015/10/12 18:02:19 Done.
126 paint.setColor(0xFFEEEEEE);
127
128 SkRect r = SkRect::MakeIWH(image->width(), image->height());
129 r.offset(x, y);
130 canvas->drawRect(r, paint);
131
132 canvas->drawImage(image, x, y, nullptr);
133 }
134
135 typedef SkImageFilter* (*ImageFilterFactory)();
136
137 /**
138 * Compare output of drawSprite and drawBitmap (esp. clipping and imagefilters)
139 */
140 class ApplyFilterGM : public skiagm::GM {
141 public:
142 ApplyFilterGM() {}
143
144 protected:
145 SkString onShortName() override {
146 return SkString("apply-filter");
147 }
148
149 SkISize onISize() override {
150 return SkISize::Make(640, 480);
151 }
152
153 void onDraw(SkCanvas* canvas) override {
154 SkAutoTUnref<SkImage> image0(make_image(canvas));
155
156 const ImageFilterFactory factories[] = {
157 (ImageFilterFactory)[]{ return SkBlurImageFilter::Create(8, 8); },
158 (ImageFilterFactory)[]{ SkAutoTUnref<SkColorFilter> cf(new SkModeCol orFilter(SK_ColorBLUE,
159 SkXfermode: :kSrcIn_Mode));
160 return (SkImageFilter*)SkColorFilterImageFilter::Create(cf);
161 },
162 (ImageFilterFactory)[]{ return SkDilateImageFilter::Create(8, 8); },
163 (ImageFilterFactory)[]{ return SkErodeImageFilter::Create(8, 8); },
164 (ImageFilterFactory)[]{ return SkOffsetImageFilter::Create(8, 8); },
165 };
166
167 for (auto&& factory : factories) {
168 SkAutoTUnref<SkImageFilter> filter(factory());
169
robertphillips 2015/10/12 16:43:32 put "offset1.setZero();" on its own line or use "=
reed1 2015/10/12 18:02:19 Done.
170 SkIPoint offset1, offset2; offset1.setZero();
171 SkAutoTUnref<SkImage> image1(image0->applyFilter(filter, &offset1, t rue));
172 SkAutoTUnref<SkImage> image2(image0->applyFilter(filter, &offset2, f alse));
173
174 canvas->save();
175 canvas->translate(30, 30);
176 show_image(canvas, image0, SkIPoint::Make(0, 0));
robertphillips 2015/10/12 16:43:32 150 -> kImageWHWithPath ?
reed1 2015/10/12 18:02:19 Done.
177 canvas->translate(150, 0);
178 show_image(canvas, image1, offset1);
179 canvas->translate(150, 0);
180 show_image(canvas, image2, offset2);
181 {
robertphillips 2015/10/12 16:43:32 // draw with old paths (drawSprite & drawImage w/
reed1 2015/10/12 18:02:19 Done.
182 SkPaint paint;
183 paint.setImageFilter(filter);
184
185 SkBitmap bm;
186 image0->asLegacyBitmap(&bm, SkImage::kRO_LegacyBitmapMode);
187 SkPoint loc = { 0, 0 };
188 canvas->translate(150, 0);
189 canvas->getTotalMatrix().mapPoints(&loc, 1);
190 canvas->drawSprite(bm, (int)loc.x(), (int)loc.y(), &paint);
191
192 canvas->translate(150, 0);
193 canvas->drawImage(image0, 0, 0, &paint);
194 }
195 canvas->restore();
196
197 canvas->translate(0, 150);
198 }
199 }
200
201 private:
202 typedef GM INHERITED;
203 };
204 DEF_GM( return new ApplyFilterGM; )
205
OLDNEW
« no previous file with comments | « no previous file | include/core/SkDevice.h » ('j') | include/core/SkImage.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698