| 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 "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 Loading... |
| 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 } |
| OLD | NEW |