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

Unified Diff: ui/gfx/color_transform.cc

Issue 2643773006: Color: Use SkColorSpacePrimaries (Closed)
Patch Set: Remove empty function Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/color_transform.cc
diff --git a/ui/gfx/color_transform.cc b/ui/gfx/color_transform.cc
index 156825534242b362c81b660dd2cabf32fb0fcfa2..ac91afee07e0343d209df1babcab49b4f5eca161 100644
--- a/ui/gfx/color_transform.cc
+++ b/ui/gfx/color_transform.cc
@@ -29,17 +29,8 @@ Transform Invert(const Transform& t) {
return ret;
}
-ColorTransform::TriStim Map(const Transform& t, ColorTransform::TriStim color) {
- t.TransformPoint(&color);
- return color;
-}
-
-ColorTransform::TriStim Xy2xyz(float x, float y) {
- return ColorTransform::TriStim(x, y, 1.0f - x - y);
-}
-
-void GetPrimaries(ColorSpace::PrimaryID id,
- ColorTransform::TriStim primaries[4]) {
+GFX_EXPORT Transform GetPrimaryMatrix(ColorSpace::PrimaryID id) {
+ SkColorSpacePrimaries primaries = {0};
switch (id) {
case ColorSpace::PrimaryID::CUSTOM:
NOTREACHED();
@@ -53,150 +44,120 @@ void GetPrimaries(ColorSpace::PrimaryID id,
// in case we somehow get an id which is not listed in the switch.
// (We don't want to use "default", because we want the compiler
// to tell us if we forgot some enum values.)
+ primaries.fRX = 0.640f;
+ primaries.fRY = 0.330f;
+ primaries.fGX = 0.300f;
+ primaries.fGY = 0.600f;
+ primaries.fBX = 0.150f;
+ primaries.fBY = 0.060f;
+ primaries.fWX = 0.3127f;
+ primaries.fWY = 0.3290f;
break;
case ColorSpace::PrimaryID::BT470M:
- // Red
- primaries[0] = Xy2xyz(0.67f, 0.33f);
- // Green
- primaries[1] = Xy2xyz(0.21f, 0.71f);
- // Blue
- primaries[2] = Xy2xyz(0.14f, 0.08f);
- // Whitepoint
- primaries[3] = Xy2xyz(0.31f, 0.316f);
- return;
+ primaries.fRX = 0.67f;
+ primaries.fRY = 0.33f;
+ primaries.fGX = 0.21f;
+ primaries.fGY = 0.71f;
+ primaries.fBX = 0.14f;
+ primaries.fBY = 0.08f;
+ primaries.fWX = 0.31f;
+ primaries.fWY = 0.316f;
+ break;
case ColorSpace::PrimaryID::BT470BG:
- // Red
- primaries[0] = Xy2xyz(0.64f, 0.33f);
- // Green
- primaries[1] = Xy2xyz(0.29f, 0.60f);
- // Blue
- primaries[2] = Xy2xyz(0.15f, 0.06f);
- // Whitepoint (D65f)
- primaries[3] = Xy2xyz(0.3127f, 0.3290f);
- return;
+ primaries.fRX = 0.64f;
+ primaries.fRY = 0.33f;
+ primaries.fGX = 0.29f;
+ primaries.fGY = 0.60f;
+ primaries.fBX = 0.15f;
+ primaries.fBY = 0.06f;
+ primaries.fWX = 0.3127f;
+ primaries.fWY = 0.3290f;
+ break;
case ColorSpace::PrimaryID::SMPTE170M:
case ColorSpace::PrimaryID::SMPTE240M:
- // Red
- primaries[0] = Xy2xyz(0.630f, 0.340f);
- // Green
- primaries[1] = Xy2xyz(0.310f, 0.595f);
- // Blue
- primaries[2] = Xy2xyz(0.155f, 0.070f);
- // Whitepoint (D65f)
- primaries[3] = Xy2xyz(0.3127f, 0.3290f);
- return;
+ primaries.fRX = 0.630f;
+ primaries.fRY = 0.340f;
+ primaries.fGX = 0.310f;
+ primaries.fGY = 0.595f;
+ primaries.fBX = 0.155f;
+ primaries.fBY = 0.070f;
+ primaries.fWX = 0.3127f;
+ primaries.fWY = 0.3290f;
+ break;
case ColorSpace::PrimaryID::FILM:
- // Red
- primaries[0] = Xy2xyz(0.681f, 0.319f);
- // Green
- primaries[1] = Xy2xyz(0.243f, 0.692f);
- // Blue
- primaries[2] = Xy2xyz(0.145f, 0.049f);
- // Whitepoint (Cf)
- primaries[3] = Xy2xyz(0.310f, 0.136f);
- return;
+ primaries.fRX = 0.681f;
+ primaries.fRY = 0.319f;
+ primaries.fGX = 0.243f;
+ primaries.fGY = 0.692f;
+ primaries.fBX = 0.145f;
+ primaries.fBY = 0.049f;
+ primaries.fWX = 0.310f;
+ primaries.fWY = 0.136f;
+ break;
case ColorSpace::PrimaryID::BT2020:
- // Red
- primaries[0] = Xy2xyz(0.708f, 0.292f);
- // Green
- primaries[1] = Xy2xyz(0.170f, 0.797f);
- // Blue
- primaries[2] = Xy2xyz(0.131f, 0.046f);
- // Whitepoint (D65f)
- primaries[3] = Xy2xyz(0.3127f, 0.3290f);
- return;
+ primaries.fRX = 0.708f;
+ primaries.fRY = 0.292f;
+ primaries.fGX = 0.170f;
+ primaries.fGY = 0.797f;
+ primaries.fBX = 0.131f;
+ primaries.fBY = 0.046f;
+ primaries.fWX = 0.3127f;
+ primaries.fWY = 0.3290f;
+ break;
case ColorSpace::PrimaryID::SMPTEST428_1:
- // X
- primaries[0] = Xy2xyz(1.0f, 0.0f);
- // Y
- primaries[1] = Xy2xyz(0.0f, 1.0f);
- // Z
- primaries[2] = Xy2xyz(0.0f, 0.0f);
- // Whitepoint (Ef)
- primaries[3] = Xy2xyz(1.0f / 3.0f, 1.0f / 3.0f);
- return;
+ primaries.fRX = 1.0f;
+ primaries.fRY = 0.0f;
+ primaries.fGX = 0.0f;
+ primaries.fGY = 1.0f;
+ primaries.fBX = 0.0f;
+ primaries.fBY = 0.0f;
+ primaries.fWX = 1.0f / 3.0f;
+ primaries.fWY = 1.0f / 3.0f;
+ break;
case ColorSpace::PrimaryID::SMPTEST431_2:
- // Red
- primaries[0] = Xy2xyz(0.680f, 0.320f);
- // Green
- primaries[1] = Xy2xyz(0.265f, 0.690f);
- // Blue
- primaries[2] = Xy2xyz(0.150f, 0.060f);
- // Whitepoint
- primaries[3] = Xy2xyz(0.314f, 0.351f);
- return;
+ primaries.fRX = 0.680f;
+ primaries.fRY = 0.320f;
+ primaries.fGX = 0.265f;
+ primaries.fGY = 0.690f;
+ primaries.fBX = 0.150f;
+ primaries.fBY = 0.060f;
+ primaries.fWX = 0.314f;
+ primaries.fWY = 0.351f;
+ break;
case ColorSpace::PrimaryID::SMPTEST432_1:
- // Red
- primaries[0] = Xy2xyz(0.680f, 0.320f);
- // Green
- primaries[1] = Xy2xyz(0.265f, 0.690f);
- // Blue
- primaries[2] = Xy2xyz(0.150f, 0.060f);
- // Whitepoint (D65f)
- primaries[3] = Xy2xyz(0.3127f, 0.3290f);
- return;
+ primaries.fRX = 0.680f;
+ primaries.fRY = 0.320f;
+ primaries.fGX = 0.265f;
+ primaries.fGY = 0.690f;
+ primaries.fBX = 0.150f;
+ primaries.fBY = 0.060f;
+ primaries.fWX = 0.3127f;
+ primaries.fWY = 0.3290f;
+ break;
case ColorSpace::PrimaryID::XYZ_D50:
- // X
- primaries[0] = Xy2xyz(1.0f, 0.0f);
- // Y
- primaries[1] = Xy2xyz(0.0f, 1.0f);
- // Z
- primaries[2] = Xy2xyz(0.0f, 0.0f);
- // D50
- primaries[3] = Xy2xyz(0.34567f, 0.35850f);
- return;
+ primaries.fRX = 1.0f;
+ primaries.fRY = 0.0f;
+ primaries.fGX = 0.0f;
+ primaries.fGY = 1.0f;
+ primaries.fBX = 0.0f;
+ primaries.fBY = 0.0f;
+ primaries.fWX = 0.34567f;
+ primaries.fWY = 0.35850f;
+ break;
}
- // Red
- primaries[0] = Xy2xyz(0.640f, 0.330f);
- // Green
- primaries[1] = Xy2xyz(0.300f, 0.600f);
- // Blue
- primaries[2] = Xy2xyz(0.150f, 0.060f);
- // Whitepoint (D65f)
- primaries[3] = Xy2xyz(0.3127f, 0.3290f);
-}
-
-GFX_EXPORT Transform GetPrimaryMatrix(ColorSpace::PrimaryID id) {
- ColorTransform::TriStim primaries[4];
- GetPrimaries(id, primaries);
- ColorTransform::TriStim WXYZ(primaries[3].x() / primaries[3].y(), 1.0f,
- primaries[3].z() / primaries[3].y());
-
- Transform ret(
- primaries[0].x(), primaries[1].x(), primaries[2].x(), 0.0f, // 1
- primaries[0].y(), primaries[1].y(), primaries[2].y(), 0.0f, // 2
- primaries[0].z(), primaries[1].z(), primaries[2].z(), 0.0f, // 3
- 0.0f, 0.0f, 0.0f, 1.0f); // 4
-
- ColorTransform::TriStim conv = Map(Invert(ret), WXYZ);
- ret.Scale3d(conv.x(), conv.y(), conv.z());
-
- // Chromatic adaptation.
- Transform bradford(0.8951000f, 0.2664000f, -0.1614000f, 0.0f, // 1
- -0.7502000f, 1.7135000f, 0.0367000f, 0.0f, // 2
- 0.0389000f, -0.0685000f, 1.0296000f, 0.0f, // 3
- 0.0f, 0.0f, 0.0f, 1.0f); // 4
-
- ColorTransform::TriStim D50(0.9642f, 1.0f, 0.8249f);
- ColorTransform::TriStim source_response = Map(bradford, WXYZ);
- ColorTransform::TriStim dest_response = Map(bradford, D50);
-
- Transform adapter;
- adapter.Scale3d(dest_response.x() / source_response.x(),
- dest_response.y() / source_response.y(),
- dest_response.z() / source_response.z());
-
- return Invert(bradford) * adapter * bradford * ret;
+ SkMatrix44 matrix;
+ primaries.toXYZD50(&matrix);
+ return Transform(matrix);
}
GFX_EXPORT float FromLinear(ColorSpace::TransferID id, float v) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698