diff options
author | Matt Sarett <msarett@google.com> | 2016-12-19 18:37:34 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-12-20 14:38:38 +0000 |
commit | 1bfcf887553a9d39b25f0d8c408b78841cd9d8fc (patch) | |
tree | 9f9f10119e05c83ba31c2a7bc7acbe8a8a7cc005 /tests | |
parent | c468963b967b5e8cde4ed320f7130a9d703c2a4e (diff) |
Implement SkICC::WriteICC()
BUG=skia:
Change-Id: Idd950c3da2c517780b24e312a4e7cc16ee413c99
Reviewed-on: https://skia-review.googlesource.com/6270
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ColorSpaceTest.cpp | 37 | ||||
-rw-r--r-- | tests/ICCTest.cpp | 43 |
2 files changed, 43 insertions, 37 deletions
diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp index 070d50264f..df253c09e3 100644 --- a/tests/ColorSpaceTest.cpp +++ b/tests/ColorSpaceTest.cpp @@ -142,43 +142,6 @@ DEF_TEST(ColorSpaceSRGBLinearCompare, r) { REPORTER_ASSERT(r, strangeColorSpace != namedColorSpace); } -class ColorSpaceTest { -public: - static sk_sp<SkData> WriteToICC(SkColorSpace* space) { - return as_CSB(space)->writeToICC(); - } -}; - -DEF_TEST(ColorSpaceWriteICC, r) { - // Test writing a new ICC profile - sk_sp<SkColorSpace> namedColorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named); - sk_sp<SkData> namedData = ColorSpaceTest::WriteToICC(namedColorSpace.get()); - sk_sp<SkColorSpace> iccColorSpace = SkColorSpace::MakeICC(namedData->data(), namedData->size()); - test_space(r, iccColorSpace.get(), g_sRGB_R, g_sRGB_G, g_sRGB_B, k2Dot2Curve_SkGammaNamed); - // FIXME (msarett): Test disabled. sRGB profiles are written approximately as 2.2f curves. - // REPORTER_ASSERT(r, iccColorSpace == namedColorSpace); - - // Test saving the original ICC data - sk_sp<SkData> monitorData = SkData::MakeFromFileName( - GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); - REPORTER_ASSERT(r, monitorData); - if (!monitorData) { - return; - } - sk_sp<SkColorSpace> monitorSpace = SkColorSpace::MakeICC(monitorData->data(), - monitorData->size()); - sk_sp<SkData> newMonitorData = ColorSpaceTest::WriteToICC(monitorSpace.get()); - sk_sp<SkColorSpace> newMonitorSpace = SkColorSpace::MakeICC(newMonitorData->data(), - newMonitorData->size()); - SkASSERT(SkColorSpace_Base::Type::kXYZ == as_CSB(monitorSpace)->type()); - SkColorSpace_XYZ* monitorSpaceXYZ = static_cast<SkColorSpace_XYZ*>(monitorSpace.get()); - SkASSERT(SkColorSpace_Base::Type::kXYZ == as_CSB(newMonitorSpace)->type()); - SkColorSpace_XYZ* newMonitorSpaceXYZ = static_cast<SkColorSpace_XYZ*>(newMonitorSpace.get()); - REPORTER_ASSERT(r, *monitorSpaceXYZ->toXYZD50() == *newMonitorSpaceXYZ->toXYZD50()); - REPORTER_ASSERT(r, monitorSpaceXYZ->toXYZD50Hash() == newMonitorSpaceXYZ->toXYZD50Hash()); - REPORTER_ASSERT(r, monitorSpaceXYZ->gammaNamed() == newMonitorSpaceXYZ->gammaNamed()); -} - DEF_TEST(ColorSpace_Named, r) { const struct { SkColorSpace::Named fNamed; diff --git a/tests/ICCTest.cpp b/tests/ICCTest.cpp index 38d6801c5f..4bc296d140 100644 --- a/tests/ICCTest.cpp +++ b/tests/ICCTest.cpp @@ -7,9 +7,11 @@ #include "Resources.h" #include "SkColorSpace.h" +#include "SkColorSpacePriv.h" #include "SkData.h" #include "SkICC.h" #include "SkMatrix44.h" +#include "SkStream.h" #include "Test.h" static bool almost_equal(float a, float b) { @@ -95,3 +97,44 @@ DEF_TEST(ICC_IsNumericalTransferFn, r) { sk_sp<SkICC> upperRight = SkICC::Make(data->data(), data->size()); test_is_numerical_transfer_fn(r, upperRight.get(), false, referenceFn); } + +static inline void test_write_icc(skiatest::Reporter* r, const SkColorSpaceTransferFn& fn, + const SkMatrix44& toXYZD50, SkColorSpace* reference, + bool writeToFile) { + sk_sp<SkData> profile = SkICC::WriteToICC(fn, toXYZD50); + if (writeToFile) { + SkFILEWStream stream("out.icc"); + stream.write(profile->data(), profile->size()); + } + + sk_sp<SkColorSpace> colorSpace = SkColorSpace::MakeICC(profile->data(), profile->size()); + REPORTER_ASSERT(r, SkColorSpace::Equals(reference, colorSpace.get())); +} + +DEF_TEST(ICC_WriteICC, r) { + SkColorSpaceTransferFn adobeFn; + adobeFn.fA = 1.0f; + adobeFn.fB = 0.0f; + adobeFn.fC = 0.0f; + adobeFn.fD = 0.0f; + adobeFn.fE = 0.0f; + adobeFn.fF = 0.0f; + adobeFn.fG = 2.2f; + SkMatrix44 adobeMatrix(SkMatrix44::kUninitialized_Constructor); + adobeMatrix.set3x3RowMajorf(gAdobeRGB_toXYZD50); + test_write_icc(r, adobeFn, adobeMatrix, + SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named).get(), false); + + SkColorSpaceTransferFn srgbFn; + srgbFn.fA = 1.0f / 1.055f; + srgbFn.fB = 0.055f / 1.055f; + srgbFn.fC = 1.0f / 12.92f; + srgbFn.fD = 0.04045f; + srgbFn.fE = 0.0f; + srgbFn.fF = 0.0f; + srgbFn.fG = 2.4f; + SkMatrix44 srgbMatrix(SkMatrix44::kUninitialized_Constructor); + srgbMatrix.set3x3RowMajorf(gSRGB_toXYZD50); + test_write_icc(r, srgbFn, srgbMatrix, SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named).get(), + false); +} |