diff options
Diffstat (limited to 'src/images/SkPNGImageEncoder.cpp')
-rw-r--r-- | src/images/SkPNGImageEncoder.cpp | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/src/images/SkPNGImageEncoder.cpp b/src/images/SkPNGImageEncoder.cpp index 2eac91d0ca..e28ae12dc0 100644 --- a/src/images/SkPNGImageEncoder.cpp +++ b/src/images/SkPNGImageEncoder.cpp @@ -12,14 +12,13 @@ #include "SkColor.h" #include "SkColorPriv.h" #include "SkDither.h" -#include "SkICC.h" +#include "SkImageEncoderFns.h" #include "SkMath.h" #include "SkStream.h" #include "SkString.h" #include "SkTemplates.h" #include "SkUnPreMultiply.h" #include "SkUtils.h" -#include "transform_scanline.h" #include "png.h" @@ -40,9 +39,7 @@ static void sk_write_fn(png_structp png_ptr, png_bytep data, png_size_t len) { } } -static void set_icc(png_structp png_ptr, png_infop info_ptr, const SkColorSpaceTransferFn& fn, - const SkMatrix44& toXYZD50) { - sk_sp<SkData> icc = SkICC::WriteToICC(fn, toXYZD50); +static void set_icc(png_structp png_ptr, png_infop info_ptr, sk_sp<SkData> icc) { #if PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 5) const char* name = "Skia"; png_const_bytep iccPtr = icc->bytes(); @@ -351,17 +348,14 @@ static bool do_encode(SkWStream* stream, const SkPixmap& pixmap, } if (pixmap.colorSpace()) { - SkColorSpaceTransferFn fn; - SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor); if (pixmap.colorSpace()->isSRGB()) { png_set_sRGB(png_ptr, info_ptr, PNG_sRGB_INTENT_PERCEPTUAL); - } else if (pixmap.colorSpace()->isNumericalTransferFn(&fn) && - pixmap.colorSpace()->toXYZD50(&toXYZD50)) - { - set_icc(png_ptr, info_ptr, fn, toXYZD50); + } else { + sk_sp<SkData> icc = icc_from_color_space(*pixmap.colorSpace()); + if (icc) { + set_icc(png_ptr, info_ptr, std::move(icc)); + } } - - // TODO: Should we support writing ICC profiles for additional color spaces? } png_set_sBIT(png_ptr, info_ptr, &sig_bit); |