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

Side by Side Diff: src/effects/SkColorMatrix.cpp

Issue 135123008: replace impl of SkLightingColorFilter with SkColorMatrixFilter (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 10 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
« no previous file with comments | « src/effects/SkColorFilters.cpp ('k') | src/effects/SkColorMatrixFilter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 #include "SkColorMatrix.h" 8 #include "SkColorMatrix.h"
9 #include "SkReadBuffer.h" 9 #include "SkReadBuffer.h"
10 #include "SkWriteBuffer.h" 10 #include "SkWriteBuffer.h"
11 11
12 #define kRScale 0
13 #define kGScale 6
14 #define kBScale 12
15 #define kAScale 18
16
17 void SkColorMatrix::setIdentity() { 12 void SkColorMatrix::setIdentity() {
18 memset(fMat, 0, sizeof(fMat)); 13 memset(fMat, 0, sizeof(fMat));
19 fMat[kRScale] = fMat[kGScale] = fMat[kBScale] = fMat[kAScale] = SK_Scalar1; 14 fMat[kR_Scale] = fMat[kG_Scale] = fMat[kB_Scale] = fMat[kA_Scale] = 1;
20 } 15 }
21 16
22 void SkColorMatrix::setScale(SkScalar rScale, SkScalar gScale, SkScalar bScale, 17 void SkColorMatrix::setScale(SkScalar rScale, SkScalar gScale, SkScalar bScale,
23 SkScalar aScale) { 18 SkScalar aScale) {
24 memset(fMat, 0, sizeof(fMat)); 19 memset(fMat, 0, sizeof(fMat));
25 fMat[kRScale] = rScale; 20 fMat[kR_Scale] = rScale;
26 fMat[kGScale] = gScale; 21 fMat[kG_Scale] = gScale;
27 fMat[kBScale] = bScale; 22 fMat[kB_Scale] = bScale;
28 fMat[kAScale] = aScale; 23 fMat[kA_Scale] = aScale;
24 }
25
26 void SkColorMatrix::postTranslate(SkScalar dr, SkScalar dg, SkScalar db,
27 SkScalar da) {
28 fMat[kR_Trans] += dr;
29 fMat[kG_Trans] += dg;
30 fMat[kB_Trans] += db;
31 fMat[kA_Trans] += da;
29 } 32 }
30 33
31 /////////////////////////////////////////////////////////////////////////////// 34 ///////////////////////////////////////////////////////////////////////////////
32 35
33 void SkColorMatrix::setRotate(Axis axis, SkScalar degrees) { 36 void SkColorMatrix::setRotate(Axis axis, SkScalar degrees) {
34 SkScalar S, C; 37 SkScalar S, C;
35 38
36 S = SkScalarSinCos(SkDegreesToRadians(degrees), &C); 39 S = SkScalarSinCos(SkDegreesToRadians(degrees), &C);
37 40
38 this->setSinCos(axis, S, C); 41 this->setSinCos(axis, S, C);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 row[2] = b; 112 row[2] = b;
110 } 113 }
111 114
112 static const SkScalar kHueR = 0.213f; 115 static const SkScalar kHueR = 0.213f;
113 static const SkScalar kHueG = 0.715f; 116 static const SkScalar kHueG = 0.715f;
114 static const SkScalar kHueB = 0.072f; 117 static const SkScalar kHueB = 0.072f;
115 118
116 void SkColorMatrix::setSaturation(SkScalar sat) { 119 void SkColorMatrix::setSaturation(SkScalar sat) {
117 memset(fMat, 0, sizeof(fMat)); 120 memset(fMat, 0, sizeof(fMat));
118 121
119 const SkScalar R = SkScalarMul(kHueR, SK_Scalar1 - sat); 122 const SkScalar R = kHueR * (1 - sat);
120 const SkScalar G = SkScalarMul(kHueG, SK_Scalar1 - sat); 123 const SkScalar G = kHueG * (1 - sat);
121 const SkScalar B = SkScalarMul(kHueB, SK_Scalar1 - sat); 124 const SkScalar B = kHueB * (1 - sat);
122 125
123 setrow(fMat + 0, R + sat, G, B); 126 setrow(fMat + 0, R + sat, G, B);
124 setrow(fMat + 5, R, G + sat, B); 127 setrow(fMat + 5, R, G + sat, B);
125 setrow(fMat + 10, R, G, B + sat); 128 setrow(fMat + 10, R, G, B + sat);
126 fMat[18] = SK_Scalar1; 129 fMat[kA_Scale] = 1;
127 } 130 }
128 131
129 static const SkScalar kR2Y = 0.299f; 132 static const SkScalar kR2Y = 0.299f;
130 static const SkScalar kG2Y = 0.587f; 133 static const SkScalar kG2Y = 0.587f;
131 static const SkScalar kB2Y = 0.114f; 134 static const SkScalar kB2Y = 0.114f;
132 135
133 static const SkScalar kR2U = -0.16874f; 136 static const SkScalar kR2U = -0.16874f;
134 static const SkScalar kG2U = -0.33126f; 137 static const SkScalar kG2U = -0.33126f;
135 static const SkScalar kB2U = 0.5f; 138 static const SkScalar kB2U = 0.5f;
136 139
137 static const SkScalar kR2V = 0.5f; 140 static const SkScalar kR2V = 0.5f;
138 static const SkScalar kG2V = -0.41869f; 141 static const SkScalar kG2V = -0.41869f;
139 static const SkScalar kB2V = -0.08131f; 142 static const SkScalar kB2V = -0.08131f;
140 143
141 void SkColorMatrix::setRGB2YUV() { 144 void SkColorMatrix::setRGB2YUV() {
142 memset(fMat, 0, sizeof(fMat)); 145 memset(fMat, 0, sizeof(fMat));
143 146
144 setrow(fMat + 0, kR2Y, kG2Y, kB2Y); 147 setrow(fMat + 0, kR2Y, kG2Y, kB2Y);
145 setrow(fMat + 5, kR2U, kG2U, kB2U); 148 setrow(fMat + 5, kR2U, kG2U, kB2U);
146 setrow(fMat + 10, kR2V, kG2V, kB2V); 149 setrow(fMat + 10, kR2V, kG2V, kB2V);
147 fMat[18] = SK_Scalar1; 150 fMat[kA_Scale] = 1;
148 } 151 }
149 152
150 static const SkScalar kV2R = 1.402f; 153 static const SkScalar kV2R = 1.402f;
151 static const SkScalar kU2G = -0.34414f; 154 static const SkScalar kU2G = -0.34414f;
152 static const SkScalar kV2G = -0.71414f; 155 static const SkScalar kV2G = -0.71414f;
153 static const SkScalar kU2B = 1.772f; 156 static const SkScalar kU2B = 1.772f;
154 157
155 void SkColorMatrix::setYUV2RGB() { 158 void SkColorMatrix::setYUV2RGB() {
156 memset(fMat, 0, sizeof(fMat)); 159 memset(fMat, 0, sizeof(fMat));
157 160
158 setrow(fMat + 0, SK_Scalar1, 0, kV2R); 161 setrow(fMat + 0, 1, 0, kV2R);
159 setrow(fMat + 5, SK_Scalar1, kU2G, kV2G); 162 setrow(fMat + 5, 1, kU2G, kV2G);
160 setrow(fMat + 10, SK_Scalar1, kU2B, 0); 163 setrow(fMat + 10, 1, kU2B, 0);
161 fMat[18] = SK_Scalar1; 164 fMat[kA_Scale] = 1;
162 } 165 }
OLDNEW
« no previous file with comments | « src/effects/SkColorFilters.cpp ('k') | src/effects/SkColorMatrixFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698