aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/images/SkPNGImageEncoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/images/SkPNGImageEncoder.cpp')
-rw-r--r--src/images/SkPNGImageEncoder.cpp20
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);