aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/codec/SkPngCodec.cpp
diff options
context:
space:
mode:
authorGravatar Leon Scroggins III <scroggo@google.com>2017-10-31 13:49:14 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-10-31 18:13:04 +0000
commitf78b55cb94f4ac89b76a26d5a56d6380aa8fea6b (patch)
tree46f0d0bdae4d61a601f6b6d30982fe3d6f39cbd9 /src/codec/SkPngCodec.cpp
parente7ac58c0d5d4585912b2fc26c2d692c6f3c28199 (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.cpp25
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();