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

Unified Diff: tests/ColorSpaceTest.cpp

Issue 2001203003: Write ICC profiles from SkColorSpace object (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rebase Created 4 years, 7 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 | « src/core/SkEndian.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/ColorSpaceTest.cpp
diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp
index da69ea7e0f6e76546f487fb44dfff139d4a7acea..b26cec20aec254f461417efc6f64c0c14c6591fe 100644
--- a/tests/ColorSpaceTest.cpp
+++ b/tests/ColorSpaceTest.cpp
@@ -46,10 +46,11 @@ const float g_sRGB_XYZ[] = { 0.4358f, 0.2224f, 0.0139f, // R
0.3853f, 0.7170f, 0.0971f, // G
0.1430f, 0.0606f, 0.7139f }; // B
+const float g_sRGB_gamma[] = { 2.2f, 2.2f, 2.2f };
+
DEF_TEST(ColorSpace_sRGB, r) {
- const float srgb_gamma[] = { 2.2f, 2.2f, 2.2f };
test_space(r, SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named).get(),
- g_sRGB_XYZ, &g_sRGB_XYZ[3], &g_sRGB_XYZ[6], srgb_gamma);
+ g_sRGB_XYZ, &g_sRGB_XYZ[3], &g_sRGB_XYZ[6], g_sRGB_gamma);
}
@@ -72,11 +73,7 @@ DEF_TEST(ColorSpaceParsePngICCProfile, r) {
SkColorSpace* colorSpace = codec->getColorSpace();
REPORTER_ASSERT(r, nullptr != colorSpace);
- const float red[] = { 0.436066f, 0.222488f, 0.013916f };
- const float green[] = { 0.385147f, 0.716873f, 0.0970764f };
- const float blue[] = { 0.143066f, 0.0606079f, 0.714096f };
- const float gamma[] = { 2.2f, 2.2f, 2.2f };
- test_space(r, colorSpace, red, green, blue, gamma);
+ test_space(r, colorSpace, &g_sRGB_XYZ[0], &g_sRGB_XYZ[3], &g_sRGB_XYZ[6], g_sRGB_gamma);
#endif
}
@@ -99,24 +96,45 @@ DEF_TEST(ColorSpaceParseJpegICCProfile, r) {
const float red[] = { 0.385117f, 0.716904f, 0.0970612f };
const float green[] = { 0.143051f, 0.0606079f, 0.713913f };
const float blue[] = { 0.436035f, 0.222488f, 0.013916f };
- const float gamma[] = { 2.2f, 2.2f, 2.2f };
- test_space(r, colorSpace, red, green, blue, gamma);
+ test_space(r, colorSpace, red, green, blue, g_sRGB_gamma);
}
DEF_TEST(ColorSpaceSRGBCompare, r) {
// Create an sRGB color space by name
sk_sp<SkColorSpace> namedColorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named);
-
// Create an sRGB color space by value
SkMatrix44 srgbToxyzD50(SkMatrix44::kUninitialized_Constructor);
- float sRGBGammas[3] = { 2.2f, 2.2f, 2.2f };
srgbToxyzD50.set3x3ColMajorf(g_sRGB_XYZ);
- sk_sp<SkColorSpace> rgbColorSpace = SkColorSpace::NewRGB(sRGBGammas, srgbToxyzD50);
- REPORTER_ASSERT(r, namedColorSpace == namedColorSpace);
+ sk_sp<SkColorSpace> rgbColorSpace = SkColorSpace::NewRGB(g_sRGB_gamma, srgbToxyzD50);
+ REPORTER_ASSERT(r, rgbColorSpace == namedColorSpace);
// Change a single value from the sRGB matrix
srgbToxyzD50.set(2, 2, 0.5f);
- sk_sp<SkColorSpace> strangeColorSpace = SkColorSpace::NewRGB(sRGBGammas, srgbToxyzD50);
+ sk_sp<SkColorSpace> strangeColorSpace = SkColorSpace::NewRGB(g_sRGB_gamma, srgbToxyzD50);
REPORTER_ASSERT(r, strangeColorSpace != namedColorSpace);
}
+
+DEF_TEST(ColorSpaceWriteICC, r) {
+ // Test writing a new ICC profile
+ sk_sp<SkColorSpace> namedColorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named);
+ sk_sp<SkData> namedData = as_CSB(namedColorSpace)->writeToICC();
+ sk_sp<SkColorSpace> iccColorSpace = SkColorSpace::NewICC(namedData->data(), namedData->size());
+ test_space(r, iccColorSpace.get(), g_sRGB_XYZ, &g_sRGB_XYZ[3], &g_sRGB_XYZ[6], g_sRGB_gamma);
+ REPORTER_ASSERT(r, iccColorSpace == namedColorSpace);
+
+ // Test saving the original ICC data
+ sk_sp<SkData> monitorData = SkData::MakeFromFileName(
+ GetResourcePath("monitor_profiles/HP_ZR30w.icc").c_str());
+ REPORTER_ASSERT(r, monitorData);
+ if (!monitorData) {
+ return;
scroggo 2016/05/24 19:12:20 This should probably fail the test or print someth
msarett 2016/05/24 19:14:27 It should fail the statement above "REPORTER_ASSER
scroggo 2016/05/24 19:14:59 D'oh! Yes it should. Nvm...
+ }
+ sk_sp<SkColorSpace> monitorSpace = SkColorSpace::NewICC(monitorData->data(),
+ monitorData->size());
+ sk_sp<SkData> newMonitorData = as_CSB(monitorSpace)->writeToICC();
+ sk_sp<SkColorSpace> newMonitorSpace = SkColorSpace::NewICC(newMonitorData->data(),
+ newMonitorData->size());
+ REPORTER_ASSERT(r, monitorSpace->xyz() == newMonitorSpace->xyz());
+ REPORTER_ASSERT(r, as_CSB(monitorSpace)->gammas() == as_CSB(newMonitorSpace)->gammas());
+}
« no previous file with comments | « src/core/SkEndian.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698