• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2011 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 
8 #include "gm.h"
9 #include "SkColorMatrixFilter.h"
10 
11 #define WIDTH 500
12 #define HEIGHT 500
13 
14 namespace skiagm {
15 
16 class ColorMatrixGM : public GM {
17 public:
ColorMatrixGM()18     ColorMatrixGM() {
19         this->setBGColor(0xFF808080);
20         fBitmap = createBitmap(64, 64);
21     }
22 
23 protected:
onShortName()24     virtual SkString onShortName() {
25         return SkString("colormatrix");
26     }
27 
onISize()28     virtual SkISize onISize() {
29         return make_isize(WIDTH, HEIGHT);
30     }
31 
createBitmap(int width,int height)32     SkBitmap createBitmap(int width, int height) {
33         SkBitmap bm;
34         bm.setConfig(SkBitmap::kARGB_8888_Config, width, height);
35         bm.allocPixels();
36         SkCanvas canvas(bm);
37         canvas.clear(0x0);
38         for (int y = 0; y < height; ++y) {
39             for (int x = 0; x < width; ++x) {
40                 SkPaint paint;
41                 paint.setColor(SkColorSetARGB(255, x * 255 / width, y * 255 / height, 0));
42                 canvas.drawRect(SkRect::MakeXYWH(x, y, 1, 1), paint);
43             }
44         }
45         return bm;
46     }
onDraw(SkCanvas * canvas)47     virtual void onDraw(SkCanvas* canvas) {
48 
49         SkPaint paint;
50         SkColorMatrix matrix;
51         SkColorMatrixFilter* filter = new SkColorMatrixFilter();
52         paint.setColorFilter(filter)->unref();
53 
54         matrix.setIdentity();
55         filter->setMatrix(matrix);
56         canvas->drawBitmap(fBitmap, 0, 0, &paint);
57 
58         matrix.setRotate(SkColorMatrix::kR_Axis, 90);
59         filter->setMatrix(matrix);
60         canvas->drawBitmap(fBitmap, 80, 0, &paint);
61 
62         matrix.setRotate(SkColorMatrix::kG_Axis, 90);
63         filter->setMatrix(matrix);
64         canvas->drawBitmap(fBitmap, 160, 0, &paint);
65 
66         matrix.setRotate(SkColorMatrix::kB_Axis, 90);
67         filter->setMatrix(matrix);
68         canvas->drawBitmap(fBitmap, 240, 0, &paint);
69 
70         matrix.setSaturation(SkFloatToScalar(0.0f));
71         filter->setMatrix(matrix);
72         canvas->drawBitmap(fBitmap, 0, 80, &paint);
73 
74         matrix.setSaturation(SkFloatToScalar(0.5f));
75         filter->setMatrix(matrix);
76         canvas->drawBitmap(fBitmap, 80, 80, &paint);
77 
78         matrix.setSaturation(SkFloatToScalar(1.0f));
79         filter->setMatrix(matrix);
80         canvas->drawBitmap(fBitmap, 160, 80, &paint);
81 
82         matrix.setSaturation(SkFloatToScalar(2.0f));
83         filter->setMatrix(matrix);
84         canvas->drawBitmap(fBitmap, 240, 80, &paint);
85 
86         matrix.setRGB2YUV();
87         filter->setMatrix(matrix);
88         canvas->drawBitmap(fBitmap, 0, 160, &paint);
89 
90         matrix.setYUV2RGB();
91         filter->setMatrix(matrix);
92         canvas->drawBitmap(fBitmap, 80, 160, &paint);
93 
94         SkScalar s1 = SK_Scalar1;
95         SkScalar s255 = SkIntToScalar(255);
96         // Move red into alpha, set color to white
97         SkScalar data[20] = {
98             0,  0, 0, 0, s255,
99             0,  0, 0, 0, s255,
100             0,  0, 0, 0, s255,
101             s1, 0, 0, 0, 0,
102         };
103 
104         filter->setArray(data);
105         canvas->drawBitmap(fBitmap, 160, 160, &paint);
106     }
107 
108 private:
109     SkBitmap fBitmap;
110     typedef GM INHERITED;
111 };
112 
113 //////////////////////////////////////////////////////////////////////////////
114 
MyFactory(void *)115 static GM* MyFactory(void*) { return new ColorMatrixGM; }
116 static GMRegistry reg(MyFactory);
117 
118 }
119