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

Unified Diff: ui/gfx/color_transform_unittest.cc

Issue 2770093003: Add test for QCMS based color transforms (Closed)
Patch Set: Really add the tests Created 3 years, 9 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_unittest.cc
diff --git a/ui/gfx/color_transform_unittest.cc b/ui/gfx/color_transform_unittest.cc
index 3e5348644a5c5e691af8b99c83c18668e1eca3a8..289e0012a6cc110d1209bb787e778b842a876caa 100644
--- a/ui/gfx/color_transform_unittest.cc
+++ b/ui/gfx/color_transform_unittest.cc
@@ -208,6 +208,72 @@ TEST(SimpleColorSpace, BT709toSRGBICC) {
EXPECT_GT(tmp.z(), tmp.y());
}
+TEST(SimpleColorSpace, ICCProfileOnlyXYZ) {
+ const float kEpsilon = 2.5f / 255.f;
+ ICCProfile icc_profile = ICCProfileForTestingNoAnalyticTrFn();
+ ColorSpace icc_space = icc_profile.GetColorSpace();
+ ColorSpace xyzd50 = ColorSpace::CreateXYZD50();
+
+ ColorTransform::TriStim input_value(127.f / 255, 187.f / 255, 157.f / 255);
+ ColorTransform::TriStim transformed_value = input_value;
+ ColorTransform::TriStim expected_transformed_value(
+ 0.34090986847877502f, 0.42633286118507385f, 0.3408740758895874f);
+
+ // One step should be needed, namely, the SkColorSpaceXform.
+ std::unique_ptr<ColorTransform> icc_to_xyzd50(
+ ColorTransform::NewColorTransform(
+ icc_space, xyzd50, ColorTransform::Intent::INTENT_ABSOLUTE));
+ EXPECT_EQ(icc_to_xyzd50->NumberOfStepsForTesting(), 1u);
+ icc_to_xyzd50->Transform(&transformed_value, 1);
+ EXPECT_NEAR(transformed_value.x(), expected_transformed_value.x(), kEpsilon);
+ EXPECT_NEAR(transformed_value.y(), expected_transformed_value.y(), kEpsilon);
+ EXPECT_NEAR(transformed_value.z(), expected_transformed_value.z(), kEpsilon);
+
+ // One step should be needed, namely, the SkColorSpaceXform.
+ std::unique_ptr<ColorTransform> xyzd50_to_icc(
+ ColorTransform::NewColorTransform(
+ xyzd50, icc_space, ColorTransform::Intent::INTENT_ABSOLUTE));
+ EXPECT_EQ(xyzd50_to_icc->NumberOfStepsForTesting(), 1u);
+ xyzd50_to_icc->Transform(&transformed_value, 1);
+ EXPECT_NEAR(input_value.x(), transformed_value.x(), kEpsilon);
+ EXPECT_NEAR(input_value.y(), transformed_value.y(), kEpsilon);
+ EXPECT_NEAR(input_value.z(), transformed_value.z(), kEpsilon);
+}
+
+TEST(SimpleColorSpace, ICCProfileOnlyColorSpin) {
+ const float kEpsilon = 2.5f / 255.f;
+ ICCProfile icc_profile = ICCProfileForTestingNoAnalyticTrFn();
+ ColorSpace icc_space = icc_profile.GetColorSpace();
+ ColorSpace colorspin =
+ ICCProfileForTestingColorSpin().GetParametricColorSpace();
+
+ ColorTransform::TriStim input_value(0.25f, 0.5f, 0.75f);
+ ColorTransform::TriStim transformed_value = input_value;
+ ColorTransform::TriStim expected_transformed_value(
+ 0.49694931507110596f, 0.74937951564788818f, 0.31359460949897766f);
+
+ // Three steps will be needed.
+ std::unique_ptr<ColorTransform> icc_to_colorspin(
+ ColorTransform::NewColorTransform(
+ icc_space, colorspin, ColorTransform::Intent::INTENT_PERCEPTUAL));
+ EXPECT_EQ(icc_to_colorspin->NumberOfStepsForTesting(), 3u);
+ icc_to_colorspin->Transform(&transformed_value, 1);
+ EXPECT_NEAR(transformed_value.x(), expected_transformed_value.x(), kEpsilon);
+ EXPECT_NEAR(transformed_value.y(), expected_transformed_value.y(), kEpsilon);
+ EXPECT_NEAR(transformed_value.z(), expected_transformed_value.z(), kEpsilon);
+
+ transformed_value = expected_transformed_value;
+ std::unique_ptr<ColorTransform> colorspin_to_icc(
+ ColorTransform::NewColorTransform(
+ colorspin, icc_space, ColorTransform::Intent::INTENT_PERCEPTUAL));
+ EXPECT_EQ(colorspin_to_icc->NumberOfStepsForTesting(), 3u);
+ transformed_value = expected_transformed_value;
+ colorspin_to_icc->Transform(&transformed_value, 1);
+ EXPECT_NEAR(input_value.x(), transformed_value.x(), kEpsilon);
+ EXPECT_NEAR(input_value.y(), transformed_value.y(), kEpsilon);
+ EXPECT_NEAR(input_value.z(), transformed_value.z(), kEpsilon);
+}
+
TEST(SimpleColorSpace, GetColorSpace) {
ICCProfile srgb_icc = ICCProfileForTestingSRGB();
ColorSpace sRGB = srgb_icc.GetColorSpace();
« 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