Index: ui/gfx/color_transform_unittest.cc |
diff --git a/ui/gfx/color_transform_unittest.cc b/ui/gfx/color_transform_unittest.cc |
index 3c4364bcb9b45e27bfe0826ac7db8a2a712f95d8..67183a532a429e527caee9eace11219dc491604c 100644 |
--- a/ui/gfx/color_transform_unittest.cc |
+++ b/ui/gfx/color_transform_unittest.cc |
@@ -83,6 +83,35 @@ TEST(SimpleColorSpace, BT709toSRGB) { |
EXPECT_GT(tmp.z(), tmp.y()); |
} |
+TEST(SimpleColorSpace, GetAffineApproximation) { |
+ // Two linear color spaces, result should be a perfect translation. |
+ ColorSpace from_colorspace( |
+ ColorSpace::PrimaryID::BT709, ColorSpace::TransferID::LINEAR, |
+ ColorSpace::MatrixID::BT709, ColorSpace::RangeID::FULL); |
+ ColorSpace to_colorspace( |
+ ColorSpace::PrimaryID::BT2020, ColorSpace::TransferID::LINEAR, |
+ ColorSpace::MatrixID::RGB, ColorSpace::RangeID::FULL); |
+ |
+ std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( |
+ from_colorspace, to_colorspace, ColorTransform::Intent::INTENT_ABSOLUTE)); |
+ Transform transform; |
+ EXPECT_TRUE(t->GetAffineApproximation(&transform)); |
+ |
+ for (int x = 0; x <= 2; x++) { |
+ for (int y = 0; y <= 2; y++) { |
+ for (int z = 0; z <= 2; z++) { |
+ ColorTransform::TriStim A(x / 2.0f, y / 2.0f, z / 2.0f); |
+ ColorTransform::TriStim B(A); |
+ t->transform(&A, 1); |
+ transform.TransformPoint(&B); |
+ EXPECT_NEAR(A.x(), B.x(), 0.001); |
+ EXPECT_NEAR(A.y(), B.y(), 0.001); |
+ EXPECT_NEAR(A.z(), B.z(), 0.001); |
+ } |
+ } |
+ } |
+} |
+ |
unsigned char srgb_icc_data[] = { |
0x00, 0x00, 0x0b, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, |
0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20, |