diff options
author | Leon Scroggins III <scroggo@google.com> | 2017-10-31 13:49:14 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-10-31 18:13:04 +0000 |
commit | f78b55cb94f4ac89b76a26d5a56d6380aa8fea6b (patch) | |
tree | 46f0d0bdae4d61a601f6b6d30982fe3d6f39cbd9 /src/codec/SkPngCodec.cpp | |
parent | e7ac58c0d5d4585912b2fc26c2d692c6f3c28199 (diff) |
Simplify SkColorSpace::MakeICC
Rather than restricting the supported ICC types in MakeICC, create any
ICC type that we support, and make the client reject them as necessary
by querying the SkColorSpace::Type.
Remove ICCTypeFlag and replace uses of it with SkColorSpace::Type.
This depends on a change in Chromium
(https://chromium-review.googlesource.com/c/chromium/src/+/741843).
Without that, this change will start allowing non-CMYK images to use
CMYK profiles.
Bug: 727128
Change-Id: I085b4665e49bc80083264496d864cc4cd62ae914
Reviewed-on: https://skia-review.googlesource.com/64841
Commit-Queue: Leon Scroggins <scroggo@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/codec/SkPngCodec.cpp')
-rw-r--r-- | src/codec/SkPngCodec.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/codec/SkPngCodec.cpp b/src/codec/SkPngCodec.cpp index 1c88b4780f..e9fff97add 100644 --- a/src/codec/SkPngCodec.cpp +++ b/src/codec/SkPngCodec.cpp @@ -343,8 +343,7 @@ static float png_inverted_fixed_point_to_float(png_fixed_point x) { // Returns a colorSpace object that represents any color space information in // the encoded data. If the encoded data contains an invalid/unsupported color space, // this will return NULL. If there is no color space information, it will guess sRGB -sk_sp<SkColorSpace> read_color_space(png_structp png_ptr, png_infop info_ptr, - SkColorSpace_Base::ICCTypeFlag iccType) { +sk_sp<SkColorSpace> read_color_space(png_structp png_ptr, png_infop info_ptr) { #if (PNG_LIBPNG_VER_MAJOR > 1) || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 6) @@ -361,7 +360,7 @@ sk_sp<SkColorSpace> read_color_space(png_structp png_ptr, png_infop info_ptr, int compression; if (PNG_INFO_iCCP == png_get_iCCP(png_ptr, info_ptr, &name, &compression, &profile, &length)) { - return SkColorSpace_Base::MakeICC(profile, length, iccType); + return SkColorSpace::MakeICC(profile, length); } // Second, check for sRGB. @@ -911,11 +910,23 @@ void AutoCleanPng::infoCallback(size_t idatLength) { if (fOutCodec) { SkASSERT(nullptr == *fOutCodec); - SkColorSpace_Base::ICCTypeFlag iccType = SkColorSpace_Base::kRGB_ICCTypeFlag; - if (SkEncodedInfo::kGray_Color == color || SkEncodedInfo::kGrayAlpha_Color == color) { - iccType |= SkColorSpace_Base::kGray_ICCTypeFlag; + sk_sp<SkColorSpace> colorSpace = read_color_space(fPng_ptr, fInfo_ptr); + if (colorSpace) { + switch (colorSpace->type()) { + case SkColorSpace::kCMYK_Type: + colorSpace = nullptr; + break; + case SkColorSpace::kGray_Type: + if (SkEncodedInfo::kGray_Color != color && + SkEncodedInfo::kGrayAlpha_Color != color) + { + colorSpace = nullptr; + } + break; + case SkColorSpace::kRGB_Type: + break; + } } - sk_sp<SkColorSpace> colorSpace = read_color_space(fPng_ptr, fInfo_ptr, iccType); if (!colorSpace) { // Treat unsupported/invalid color spaces as sRGB. colorSpace = SkColorSpace::MakeSRGB(); |