diff options
author | Matt Sarett <msarett@google.com> | 2016-12-16 16:28:17 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-12-16 22:13:28 +0000 |
commit | fc8dc3194acb959ee5980b41766660ca0644bcab (patch) | |
tree | d894d51cc1a9984a7e147d80eefe4fff16ff8b1c /src/core/SkColorSpace_XYZ.cpp | |
parent | 0eb6ed421ccd4f8a84ef5e5a11df73a00d210aec (diff) |
WIP: Skia support library for ICC tasks
As a starting point, this would be mostly trivial to implement using
SkColorSpace.
This also would give us the flexibility to begin to move all of
the ICC related code from SkColorSpace to SkICC.
What are the advantages of moving this away from SkColorSpace?
(1) A long term goal (once Chrome uses SkCodec), might be to
move SkColorSpace::MakeICC() out of the public API. That way,
we can guarantee that we can draw to/from *any* SkColorSpace.
(2) Keeps SkColorSpace separate from ICC-specific representations
like SkColorSpaceTransferFn etc.
BUG=skia:
Change-Id: Iddeb9903221fb57fbfc01218d8641c928b4a5165
Reviewed-on: https://skia-review.googlesource.com/5676
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src/core/SkColorSpace_XYZ.cpp')
-rw-r--r-- | src/core/SkColorSpace_XYZ.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/core/SkColorSpace_XYZ.cpp b/src/core/SkColorSpace_XYZ.cpp index b91789614f..30f70b6e26 100644 --- a/src/core/SkColorSpace_XYZ.cpp +++ b/src/core/SkColorSpace_XYZ.cpp @@ -5,8 +5,9 @@ * found in the LICENSE file. */ -#include "SkColorSpace_XYZ.h" #include "SkChecksum.h" +#include "SkColorSpace_XYZ.h" +#include "SkColorSpacePriv.h" #include "SkColorSpaceXform_Base.h" static constexpr float gSRGB_toXYZD50[] { @@ -64,6 +65,29 @@ bool SkColorSpace_XYZ::onGammaIsLinear() const { return kLinear_SkGammaNamed == fGammaNamed; } +bool SkColorSpace_XYZ::onIsNumericalTransferFn(SkColorSpaceTransferFn* coeffs) const { + if (named_to_parametric(coeffs, fGammaNamed)) { + return true; + } + + SkASSERT(fGammas); + if (fGammas->data(0) != fGammas->data(1) || fGammas->data(0) != fGammas->data(2)) { + return false; + } + + if (fGammas->isValue(0)) { + value_to_parametric(coeffs, fGammas->data(0).fValue); + return true; + } + + if (fGammas->isParametric(0)) { + *coeffs = fGammas->params(0); + return true; + } + + return false; +} + sk_sp<SkColorSpace> SkColorSpace_XYZ::makeLinearGamma() { if (this->gammaIsLinear()) { return sk_ref_sp(this); |