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

Side by Side Diff: gm/colormatrix.cpp

Issue 1217053003: add SkImage::NewFromBitmap (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 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
« no previous file with comments | « no previous file | include/core/SkImage.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 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 "SkColorMatrixFilter.h" 9 #include "SkColorMatrixFilter.h"
10 #include "SkGradientShader.h" 10 #include "SkGradientShader.h"
11 #include "SkImage.h"
11 12
12 #define WIDTH 500 13 #define WIDTH 500
13 #define HEIGHT 500 14 #define HEIGHT 500
14 15
15 class SkDoOnce { 16 class SkDoOnce {
16 public: 17 public:
17 SkDoOnce() : fOnce(false) {}; 18 SkDoOnce() : fOnce(false) {};
18 19
19 bool once() const { 20 bool once() const {
20 if (fOnce) { 21 if (fOnce) {
21 return false; 22 return false;
22 } 23 }
23 fOnce = true; 24 fOnce = true;
24 return true; 25 return true;
25 } 26 }
26 27
27 private: 28 private:
28 mutable bool fOnce; 29 mutable bool fOnce;
29 }; 30 };
30 31
robertphillips 2015/07/06 20:43:47 set_color_matrix ?
reed2 2015/07/07 01:18:02 Done.
31 static void setColorMatrix(SkPaint* paint, const SkColorMatrix& matrix) { 32 static void setColorMatrix(SkPaint* paint, const SkColorMatrix& matrix) {
32 paint->setColorFilter(SkColorMatrixFilter::Create(matrix))->unref(); 33 paint->setColorFilter(SkColorMatrixFilter::Create(matrix))->unref();
33 } 34 }
34 35
robertphillips 2015/07/06 20:43:47 set_array ?
reed2 2015/07/07 01:18:02 Done.
35 static void setArray(SkPaint* paint, const SkScalar array[]) { 36 static void setArray(SkPaint* paint, const SkScalar array[]) {
36 paint->setColorFilter(SkColorMatrixFilter::Create(array))->unref(); 37 paint->setColorFilter(SkColorMatrixFilter::Create(array))->unref();
37 } 38 }
38 39
39 namespace skiagm { 40 class ColorMatrixGM : public skiagm::GM {
40
41 class ColorMatrixGM : public GM {
42 SkDoOnce fOnce; 41 SkDoOnce fOnce;
robertphillips 2015/07/06 20:43:47 Can this not occur in onOnceBeforeDraw ?
reed2 2015/07/07 01:18:02 Done.
43 void init() { 42 void init() {
44 if (fOnce.once()) { 43 if (fOnce.once()) {
45 fSolidBitmap = this->createSolidBitmap(64, 64); 44 fSolidImg.reset(this->createSolidBitmap(64, 64));
46 fTransparentBitmap = this->createTransparentBitmap(64, 64); 45 fTransparentImg.reset(this->createTransparentBitmap(64, 64));
47 } 46 }
48 } 47 }
49 48
50 public: 49 public:
51 ColorMatrixGM() { 50 ColorMatrixGM() {
52 this->setBGColor(sk_tool_utils::color_to_565(0xFF808080)); 51 this->setBGColor(sk_tool_utils::color_to_565(0xFF808080));
53 } 52 }
54 53
55 protected: 54 protected:
robertphillips 2015/07/06 20:43:47 override(s) ?
reed2 2015/07/07 01:18:02 Done.
56 virtual SkString onShortName() { 55 virtual SkString onShortName() {
57 return SkString("colormatrix"); 56 return SkString("colormatrix");
58 } 57 }
59 58
60 virtual SkISize onISize() { 59 virtual SkISize onISize() {
61 return SkISize::Make(WIDTH, HEIGHT); 60 return SkISize::Make(WIDTH, HEIGHT);
62 } 61 }
63 62
robertphillips 2015/07/06 20:43:47 Can createSolidBitmap & createTransparentBitmap be
reed2 2015/07/07 01:18:02 Done.
64 SkBitmap createSolidBitmap(int width, int height) { 63 SkImage* createSolidBitmap(int width, int height) {
65 SkBitmap bm; 64 SkBitmap bm;
66 bm.allocN32Pixels(width, height); 65 bm.allocN32Pixels(width, height);
67 SkCanvas canvas(bm); 66 SkCanvas canvas(bm);
68 canvas.clear(0x0); 67 canvas.clear(0x0);
69 for (int y = 0; y < height; ++y) { 68 for (int y = 0; y < height; ++y) {
70 for (int x = 0; x < width; ++x) { 69 for (int x = 0; x < width; ++x) {
71 SkPaint paint; 70 SkPaint paint;
72 paint.setColor(SkColorSetARGB(255, x * 255 / width, y * 255 / he ight, 0)); 71 paint.setColor(SkColorSetARGB(255, x * 255 / width, y * 255 / he ight, 0));
73 canvas.drawRect(SkRect::MakeXYWH(SkIntToScalar(x), 72 canvas.drawRect(SkRect::MakeXYWH(SkIntToScalar(x),
74 SkIntToScalar(y), SK_Scalar1, SK_Scalar1), paint); 73 SkIntToScalar(y), SK_Scalar1, SK_Scalar1), paint);
75 } 74 }
76 } 75 }
77 return bm; 76 return SkImage::NewFromBitmap(bm);
78 } 77 }
79 78
80 // creates a bitmap with shades of transparent gray. 79 // creates a bitmap with shades of transparent gray.
81 SkBitmap createTransparentBitmap(int width, int height) { 80 SkImage* createTransparentBitmap(int width, int height) {
82 SkBitmap bm; 81 SkBitmap bm;
83 bm.allocN32Pixels(width, height); 82 bm.allocN32Pixels(width, height);
84 SkCanvas canvas(bm); 83 SkCanvas canvas(bm);
85 canvas.clear(0x0); 84 canvas.clear(0x0);
86 85
87 SkPoint pts[] = {{0, 0}, {SkIntToScalar(width), SkIntToScalar(height)}}; 86 SkPoint pts[] = {{0, 0}, {SkIntToScalar(width), SkIntToScalar(height)}};
88 SkColor colors[] = {0x00000000, 0xFFFFFFFF}; 87 SkColor colors[] = {0x00000000, 0xFFFFFFFF};
89 SkPaint paint; 88 SkPaint paint;
90 paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2, 89 paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2,
91 SkShader::kClamp_TileMode ))->unref(); 90 SkShader::kClamp_TileMode ))->unref();
92 canvas.drawRect(SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(heigh t)), paint); 91 canvas.drawRect(SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(heigh t)), paint);
93 return bm; 92 return SkImage::NewFromBitmap(bm);
94 } 93 }
95 94
96 virtual void onDraw(SkCanvas* canvas) { 95 virtual void onDraw(SkCanvas* canvas) {
97 this->init(); 96 this->init();
98 97
99 SkPaint paint; 98 SkPaint paint;
100 SkColorMatrix matrix; 99 SkColorMatrix matrix;
101 100
102 paint.setXfermodeMode(SkXfermode::kSrc_Mode); 101 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
103 const SkBitmap bmps[] = { fSolidBitmap, fTransparentBitmap }; 102 const SkImage* bmps[] = { fSolidImg, fTransparentImg };
104 103
105 for (size_t i = 0; i < SK_ARRAY_COUNT(bmps); ++i) { 104 for (size_t i = 0; i < SK_ARRAY_COUNT(bmps); ++i) {
106 matrix.setIdentity(); 105 matrix.setIdentity();
107 setColorMatrix(&paint, matrix); 106 setColorMatrix(&paint, matrix);
108 canvas->drawBitmap(bmps[i], 0, 0, &paint); 107 canvas->drawImage(bmps[i], 0, 0, &paint);
109 108
110 matrix.setRotate(SkColorMatrix::kR_Axis, 90); 109 matrix.setRotate(SkColorMatrix::kR_Axis, 90);
111 setColorMatrix(&paint, matrix); 110 setColorMatrix(&paint, matrix);
112 canvas->drawBitmap(bmps[i], 80, 0, &paint); 111 canvas->drawImage(bmps[i], 80, 0, &paint);
113 112
114 matrix.setRotate(SkColorMatrix::kG_Axis, 90); 113 matrix.setRotate(SkColorMatrix::kG_Axis, 90);
115 setColorMatrix(&paint, matrix); 114 setColorMatrix(&paint, matrix);
116 canvas->drawBitmap(bmps[i], 160, 0, &paint); 115 canvas->drawImage(bmps[i], 160, 0, &paint);
117 116
118 matrix.setRotate(SkColorMatrix::kB_Axis, 90); 117 matrix.setRotate(SkColorMatrix::kB_Axis, 90);
119 setColorMatrix(&paint, matrix); 118 setColorMatrix(&paint, matrix);
120 canvas->drawBitmap(bmps[i], 240, 0, &paint); 119 canvas->drawImage(bmps[i], 240, 0, &paint);
121 120 ///////////////////////////////////////////////
122 matrix.setSaturation(0.0f); 121 matrix.setSaturation(0.0f);
123 setColorMatrix(&paint, matrix); 122 setColorMatrix(&paint, matrix);
124 canvas->drawBitmap(bmps[i], 0, 80, &paint); 123 canvas->drawImage(bmps[i], 0, 80, &paint);
125 124
126 matrix.setSaturation(0.5f); 125 matrix.setSaturation(0.5f);
127 setColorMatrix(&paint, matrix); 126 setColorMatrix(&paint, matrix);
128 canvas->drawBitmap(bmps[i], 80, 80, &paint); 127 canvas->drawImage(bmps[i], 80, 80, &paint);
129 128
130 matrix.setSaturation(1.0f); 129 matrix.setSaturation(1.0f);
131 setColorMatrix(&paint, matrix); 130 setColorMatrix(&paint, matrix);
132 canvas->drawBitmap(bmps[i], 160, 80, &paint); 131 canvas->drawImage(bmps[i], 160, 80, &paint);
133 132
134 matrix.setSaturation(2.0f); 133 matrix.setSaturation(2.0f);
135 setColorMatrix(&paint, matrix); 134 setColorMatrix(&paint, matrix);
136 canvas->drawBitmap(bmps[i], 240, 80, &paint); 135 canvas->drawImage(bmps[i], 240, 80, &paint);
137 136 ///////////////////////////////////////////////
138 matrix.setRGB2YUV(); 137 matrix.setRGB2YUV();
139 setColorMatrix(&paint, matrix); 138 setColorMatrix(&paint, matrix);
140 canvas->drawBitmap(bmps[i], 0, 160, &paint); 139 canvas->drawImage(bmps[i], 0, 160, &paint);
141 140
142 matrix.setYUV2RGB(); 141 matrix.setYUV2RGB();
143 setColorMatrix(&paint, matrix); 142 setColorMatrix(&paint, matrix);
144 canvas->drawBitmap(bmps[i], 80, 160, &paint); 143 canvas->drawImage(bmps[i], 80, 160, &paint);
145 144
146 SkScalar s1 = SK_Scalar1; 145 SkScalar s1 = SK_Scalar1;
147 SkScalar s255 = SkIntToScalar(255); 146 SkScalar s255 = SkIntToScalar(255);
148 // Move red into alpha, set color to white 147 // Move red into alpha, set color to white
149 SkScalar data[20] = { 148 SkScalar data[20] = {
150 0, 0, 0, 0, s255, 149 0, 0, 0, 0, s255,
151 0, 0, 0, 0, s255, 150 0, 0, 0, 0, s255,
152 0, 0, 0, 0, s255, 151 0, 0, 0, 0, s255,
153 s1, 0, 0, 0, 0, 152 s1, 0, 0, 0, 0,
154 }; 153 };
155 154
156 setArray(&paint, data); 155 setArray(&paint, data);
157 canvas->drawBitmap(bmps[i], 160, 160, &paint); 156 canvas->drawImage(bmps[i], 160, 160, &paint);
158 157 ///////////////////////////////////////////////
159 canvas->translate(0, 240); 158 canvas->translate(0, 240);
160 } 159 }
161 } 160 }
162 161
163 private: 162 private:
164 SkBitmap fSolidBitmap; 163 SkAutoTUnref<SkImage> fSolidImg;
165 SkBitmap fTransparentBitmap; 164 SkAutoTUnref<SkImage> fTransparentImg;
166 typedef GM INHERITED; 165
166 typedef skiagm::GM INHERITED;
167 }; 167 };
168 DEF_GM( return new ColorMatrixGM; )
168 169
169 //////////////////////////////////////////////////////////////////////////////
170
171 static GM* MyFactory(void*) { return new ColorMatrixGM; }
172 static GMRegistry reg(MyFactory);
173
174 }
OLDNEW
« no previous file with comments | « no previous file | include/core/SkImage.h » ('j') | include/core/SkImage.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698