OLD | NEW |
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 "SkFlattenableBuffers.h" | 9 #include "SkFlattenableBuffers.h" |
10 | 10 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 } | 101 } |
102 | 102 |
103 /////////////////////////////////////////////////////////////////////////////// | 103 /////////////////////////////////////////////////////////////////////////////// |
104 | 104 |
105 static void setrow(SkScalar row[], SkScalar r, SkScalar g, SkScalar b) { | 105 static void setrow(SkScalar row[], SkScalar r, SkScalar g, SkScalar b) { |
106 row[0] = r; | 106 row[0] = r; |
107 row[1] = g; | 107 row[1] = g; |
108 row[2] = b; | 108 row[2] = b; |
109 } | 109 } |
110 | 110 |
111 static const SkScalar kHueR = SkFloatToScalar(0.213f); | 111 static const SkScalar kHueR = 0.213f; |
112 static const SkScalar kHueG = SkFloatToScalar(0.715f); | 112 static const SkScalar kHueG = 0.715f; |
113 static const SkScalar kHueB = SkFloatToScalar(0.072f); | 113 static const SkScalar kHueB = 0.072f; |
114 | 114 |
115 void SkColorMatrix::setSaturation(SkScalar sat) { | 115 void SkColorMatrix::setSaturation(SkScalar sat) { |
116 memset(fMat, 0, sizeof(fMat)); | 116 memset(fMat, 0, sizeof(fMat)); |
117 | 117 |
118 const SkScalar R = SkScalarMul(kHueR, SK_Scalar1 - sat); | 118 const SkScalar R = SkScalarMul(kHueR, SK_Scalar1 - sat); |
119 const SkScalar G = SkScalarMul(kHueG, SK_Scalar1 - sat); | 119 const SkScalar G = SkScalarMul(kHueG, SK_Scalar1 - sat); |
120 const SkScalar B = SkScalarMul(kHueB, SK_Scalar1 - sat); | 120 const SkScalar B = SkScalarMul(kHueB, SK_Scalar1 - sat); |
121 | 121 |
122 setrow(fMat + 0, R + sat, G, B); | 122 setrow(fMat + 0, R + sat, G, B); |
123 setrow(fMat + 5, R, G + sat, B); | 123 setrow(fMat + 5, R, G + sat, B); |
124 setrow(fMat + 10, R, G, B + sat); | 124 setrow(fMat + 10, R, G, B + sat); |
125 fMat[18] = SK_Scalar1; | 125 fMat[18] = SK_Scalar1; |
126 } | 126 } |
127 | 127 |
128 static const SkScalar kR2Y = SkFloatToScalar(0.299f); | 128 static const SkScalar kR2Y = 0.299f; |
129 static const SkScalar kG2Y = SkFloatToScalar(0.587f); | 129 static const SkScalar kG2Y = 0.587f; |
130 static const SkScalar kB2Y = SkFloatToScalar(0.114f); | 130 static const SkScalar kB2Y = 0.114f; |
131 | 131 |
132 static const SkScalar kR2U = SkFloatToScalar(-0.16874f); | 132 static const SkScalar kR2U = -0.16874f; |
133 static const SkScalar kG2U = SkFloatToScalar(-0.33126f); | 133 static const SkScalar kG2U = -0.33126f; |
134 static const SkScalar kB2U = SkFloatToScalar(0.5f); | 134 static const SkScalar kB2U = 0.5f; |
135 | 135 |
136 static const SkScalar kR2V = SkFloatToScalar(0.5f); | 136 static const SkScalar kR2V = 0.5f; |
137 static const SkScalar kG2V = SkFloatToScalar(-0.41869f); | 137 static const SkScalar kG2V = -0.41869f; |
138 static const SkScalar kB2V = SkFloatToScalar(-0.08131f); | 138 static const SkScalar kB2V = -0.08131f; |
139 | 139 |
140 void SkColorMatrix::setRGB2YUV() { | 140 void SkColorMatrix::setRGB2YUV() { |
141 memset(fMat, 0, sizeof(fMat)); | 141 memset(fMat, 0, sizeof(fMat)); |
142 | 142 |
143 setrow(fMat + 0, kR2Y, kG2Y, kB2Y); | 143 setrow(fMat + 0, kR2Y, kG2Y, kB2Y); |
144 setrow(fMat + 5, kR2U, kG2U, kB2U); | 144 setrow(fMat + 5, kR2U, kG2U, kB2U); |
145 setrow(fMat + 10, kR2V, kG2V, kB2V); | 145 setrow(fMat + 10, kR2V, kG2V, kB2V); |
146 fMat[18] = SK_Scalar1; | 146 fMat[18] = SK_Scalar1; |
147 } | 147 } |
148 | 148 |
149 static const SkScalar kV2R = SkFloatToScalar(1.402f); | 149 static const SkScalar kV2R = 1.402f; |
150 static const SkScalar kU2G = SkFloatToScalar(-0.34414f); | 150 static const SkScalar kU2G = -0.34414f; |
151 static const SkScalar kV2G = SkFloatToScalar(-0.71414f); | 151 static const SkScalar kV2G = -0.71414f; |
152 static const SkScalar kU2B = SkFloatToScalar(1.772f); | 152 static const SkScalar kU2B = 1.772f; |
153 | 153 |
154 void SkColorMatrix::setYUV2RGB() { | 154 void SkColorMatrix::setYUV2RGB() { |
155 memset(fMat, 0, sizeof(fMat)); | 155 memset(fMat, 0, sizeof(fMat)); |
156 | 156 |
157 setrow(fMat + 0, SK_Scalar1, 0, kV2R); | 157 setrow(fMat + 0, SK_Scalar1, 0, kV2R); |
158 setrow(fMat + 5, SK_Scalar1, kU2G, kV2G); | 158 setrow(fMat + 5, SK_Scalar1, kU2G, kV2G); |
159 setrow(fMat + 10, SK_Scalar1, kU2B, 0); | 159 setrow(fMat + 10, SK_Scalar1, kU2B, 0); |
160 fMat[18] = SK_Scalar1; | 160 fMat[18] = SK_Scalar1; |
161 } | 161 } |
OLD | NEW |