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

Side by Side Diff: gm/filterbitmap.cpp

Issue 17381008: More general version of image filtering; reworked to be robust and easier to SSE (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: make temp. scale function private; disable GM and bench for that function Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 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 "SkGradientShader.h" 9 #include "SkGradientShader.h"
10 10
(...skipping 17 matching lines...) Expand all
28 SkPaint paint; 28 SkPaint paint;
29 29
30 SkAutoCanvasRestore acr(canvas, true); 30 SkAutoCanvasRestore acr(canvas, true);
31 31
32 canvas->drawBitmapMatrix(bm, mat, &paint); 32 canvas->drawBitmapMatrix(bm, mat, &paint);
33 33
34 paint.setFilterBitmap(true); 34 paint.setFilterBitmap(true);
35 canvas->translate(dx, 0); 35 canvas->translate(dx, 0);
36 canvas->drawBitmapMatrix(bm, mat, &paint); 36 canvas->drawBitmapMatrix(bm, mat, &paint);
37 37
38 paint.setFlags(paint.getFlags() | SkPaint::kBicubicFilterBitmap_Flag); 38 paint.setFlags(paint.getFlags() | SkPaint::kHighQualityFilterBitmap_Flag);
39 canvas->translate(dx, 0); 39 canvas->translate(dx, 0);
40 canvas->drawBitmapMatrix(bm, mat, &paint); 40 canvas->drawBitmapMatrix(bm, mat, &paint);
41 } 41 }
42 42
43 class FilterBitmapGM : public skiagm::GM { 43 class FilterBitmapGM : public skiagm::GM {
44 void onOnceBeforeDraw() { 44 void onOnceBeforeDraw() {
45 45
46 make_bitmap(); 46 make_bitmap();
47 47
48 SkScalar cx = SkScalarHalf(fBM.width()); 48 SkScalar cx = SkScalarHalf(fBM.width());
49 SkScalar cy = SkScalarHalf(fBM.height()); 49 SkScalar cy = SkScalarHalf(fBM.height());
50 SkScalar scale = get_scale(); 50 SkScalar scale = get_scale();
51 51
52 52
53 fMatrix[0].setScale(scale, scale); 53 fMatrix[0].setScale(scale, scale);
54 fMatrix[1].setRotate(30, cx, cy); fMatrix[1].postScale(scale, scale); 54 fMatrix[1].setRotate(30, cx, cy); fMatrix[1].postScale(scale, scale);
55 } 55 }
56 56
57 public: 57 public:
58 SkBitmap fBM; 58 SkBitmap fBM;
59 SkMatrix fMatrix[2]; 59 SkMatrix fMatrix[2];
60 SkString fName; 60 SkString fName;
61 61
62 FilterBitmapGM() 62 FilterBitmapGM()
63 { 63 {
64 this->setBGColor(0xFFDDDDDD); 64 this->setBGColor(0xFFDDDDDD);
65 } 65 }
66 66
67 void setName( const char name[] ) { 67 void setName(const char name[]) {
68 fName.set(name); 68 fName.set(name);
69 } 69 }
70 70
71 protected: 71 protected:
72 virtual SkString onShortName() SK_OVERRIDE { 72 virtual SkString onShortName() SK_OVERRIDE {
73 return fName; 73 return fName;
74 } 74 }
75 75
76 virtual SkISize onISize() SK_OVERRIDE { 76 virtual SkISize onISize() SK_OVERRIDE {
77 return SkISize::Make(920, 480); 77 return SkISize::Make(920, 480);
(...skipping 14 matching lines...) Expand all
92 canvas->translate(0, size.fHeight); 92 canvas->translate(0, size.fHeight);
93 } 93 }
94 } 94 }
95 95
96 private: 96 private:
97 typedef skiagm::GM INHERITED; 97 typedef skiagm::GM INHERITED;
98 }; 98 };
99 99
100 class FilterBitmapTextGM: public FilterBitmapGM { 100 class FilterBitmapTextGM: public FilterBitmapGM {
101 public: 101 public:
102 FilterBitmapTextGM( float textSize ) 102 FilterBitmapTextGM(float textSize)
103 : fTextSize( textSize ) 103 : fTextSize(textSize)
104 { 104 {
105 char name[1024]; 105 char name[1024];
106 sprintf( name, "filterbitmap_text_%.2fpt", fTextSize ); 106 sprintf(name, "filterbitmap_text_%.2fpt", fTextSize);
107 setName( name ); 107 setName(name);
108 } 108 }
109 109
110 protected: 110 protected:
111 float fTextSize; 111 float fTextSize;
112 112
113 SkScalar get_scale() SK_OVERRIDE { 113 SkScalar get_scale() SK_OVERRIDE {
114 return 32.f/fTextSize; 114 return 32.f/fTextSize;
115 } 115 }
116 116
117 void make_bitmap() SK_OVERRIDE { 117 void make_bitmap() SK_OVERRIDE {
(...skipping 15 matching lines...) Expand all
133 canvas.drawText("Hamburgefons", 12, fTextSize/2, 3.6f*fTextSize, paint ); 133 canvas.drawText("Hamburgefons", 12, fTextSize/2, 3.6f*fTextSize, paint );
134 setTypeface(&paint, "Times", SkTypeface::kBoldItalic); 134 setTypeface(&paint, "Times", SkTypeface::kBoldItalic);
135 canvas.drawText("Hamburgefons", 12, fTextSize/2, 4.8f*fTextSize, paint ); 135 canvas.drawText("Hamburgefons", 12, fTextSize/2, 4.8f*fTextSize, paint );
136 } 136 }
137 private: 137 private:
138 typedef FilterBitmapGM INHERITED; 138 typedef FilterBitmapGM INHERITED;
139 }; 139 };
140 140
141 class FilterBitmapCheckerboardGM: public FilterBitmapGM { 141 class FilterBitmapCheckerboardGM: public FilterBitmapGM {
142 public: 142 public:
143 FilterBitmapCheckerboardGM( int size, int num_checks ) 143 FilterBitmapCheckerboardGM(int size, int num_checks)
144 : fSize( size ), fNumChecks( num_checks ) 144 : fSize(size), fNumChecks(num_checks)
145 { 145 {
146 char name[1024]; 146 char name[1024];
147 sprintf( name, "filterbitmap_checkerboard_%d_%d", fSize, fNumChecks ); 147 sprintf(name, "filterbitmap_checkerboard_%d_%d", fSize, fNumChecks);
148 setName( name ); 148 setName(name);
149 } 149 }
150 150
151 protected: 151 protected:
152 int fSize; 152 int fSize;
153 int fNumChecks; 153 int fNumChecks;
154 154
155 SkScalar get_scale() SK_OVERRIDE { 155 SkScalar get_scale() SK_OVERRIDE {
156 return 192.f/fSize; 156 return 192.f/fSize;
157 } 157 }
158 158
(...skipping 13 matching lines...) Expand all
172 } 172 }
173 } 173 }
174 } 174 }
175 } 175 }
176 private: 176 private:
177 typedef FilterBitmapGM INHERITED; 177 typedef FilterBitmapGM INHERITED;
178 }; 178 };
179 179
180 class FilterBitmapImageGM: public FilterBitmapGM { 180 class FilterBitmapImageGM: public FilterBitmapGM {
181 public: 181 public:
182 FilterBitmapImageGM( const char filename[] ) 182 FilterBitmapImageGM(const char filename[])
183 : fFilename( filename ) 183 : fFilename(filename)
184 { 184 {
185 char name[1024]; 185 char name[1024];
186 sprintf( name, "filterbitmap_image_%s", filename ); 186 sprintf(name, "filterbitmap_image_%s", filename);
187 setName( name ); 187 setName(name);
188 } 188 }
189 189
190 protected: 190 protected:
191 SkString fFilename; 191 SkString fFilename;
192 int fSize; 192 int fSize;
193 193
194 SkScalar get_scale() SK_OVERRIDE { 194 SkScalar get_scale() SK_OVERRIDE {
195 return 192.f/fSize; 195 return 192.f/fSize;
196 } 196 }
197 197
198 void make_bitmap() SK_OVERRIDE { 198 void make_bitmap() SK_OVERRIDE {
199 SkString path(skiagm::GM::gResourcePath); 199 SkString path(skiagm::GM::gResourcePath);
200 path.append( "/" ); 200 path.append("/");
201 path.append(fFilename); 201 path.append(fFilename);
202 202
203 SkImageDecoder *codec = NULL; 203 SkImageDecoder *codec = NULL;
204 SkFILEStream stream(path.c_str()); 204 SkFILEStream stream(path.c_str());
205 if (stream.isValid()) { 205 if (stream.isValid()) {
206 codec = SkImageDecoder::Factory(&stream); 206 codec = SkImageDecoder::Factory(&stream);
207 } 207 }
208 if (codec) { 208 if (codec) {
209 stream.rewind(); 209 stream.rewind();
210 codec->decode(&stream, &fBM, SkBitmap::kARGB_8888_Config, 210 codec->decode(&stream, &fBM, SkBitmap::kARGB_8888_Config,
(...skipping 19 matching lines...) Expand all
230 DEF_GM( return new FilterBitmapCheckerboardGM(32,32); ) 230 DEF_GM( return new FilterBitmapCheckerboardGM(32,32); )
231 DEF_GM( return new FilterBitmapCheckerboardGM(32,8); ) 231 DEF_GM( return new FilterBitmapCheckerboardGM(32,8); )
232 DEF_GM( return new FilterBitmapCheckerboardGM(32,2); ) 232 DEF_GM( return new FilterBitmapCheckerboardGM(32,2); )
233 DEF_GM( return new FilterBitmapCheckerboardGM(192,192); ) 233 DEF_GM( return new FilterBitmapCheckerboardGM(192,192); )
234 DEF_GM( return new FilterBitmapImageGM("mandrill_16.png"); ) 234 DEF_GM( return new FilterBitmapImageGM("mandrill_16.png"); )
235 DEF_GM( return new FilterBitmapImageGM("mandrill_32.png"); ) 235 DEF_GM( return new FilterBitmapImageGM("mandrill_32.png"); )
236 DEF_GM( return new FilterBitmapImageGM("mandrill_64.png"); ) 236 DEF_GM( return new FilterBitmapImageGM("mandrill_64.png"); )
237 DEF_GM( return new FilterBitmapImageGM("mandrill_128.png"); ) 237 DEF_GM( return new FilterBitmapImageGM("mandrill_128.png"); )
238 DEF_GM( return new FilterBitmapImageGM("mandrill_256.png"); ) 238 DEF_GM( return new FilterBitmapImageGM("mandrill_256.png"); )
239 DEF_GM( return new FilterBitmapImageGM("mandrill_512.png"); ) 239 DEF_GM( return new FilterBitmapImageGM("mandrill_512.png"); )
OLDNEW
« no previous file with comments | « bench/BitmapScaleBench.cpp ('k') | gm/scalebitmap.cpp » ('j') | include/core/SkBitmap.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698