aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/images/SkPngEncoder.cpp
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-06-12 16:17:30 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-12 20:38:49 +0000
commit1950e0a868774330330555a9a368992218f42240 (patch)
tree806ff1a283b52d027871c842e2da8f5df4ca2eb7 /src/images/SkPngEncoder.cpp
parentca50b874039e326858e38bc67457369532a9c4dd (diff)
Always encode images with sRGB encoded pixels
Bug: skia: Change-Id: Icb25bc21a30e88f21df5b0e267d5a3a05535e44a Reviewed-on: https://skia-review.googlesource.com/19544 Commit-Queue: Matt Sarett <msarett@google.com> Commit-Queue: Mike Klein <mtklein@chromium.org> Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/images/SkPngEncoder.cpp')
-rw-r--r--src/images/SkPngEncoder.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/images/SkPngEncoder.cpp b/src/images/SkPngEncoder.cpp
index cc925207b1..b0c2b23dfb 100644
--- a/src/images/SkPngEncoder.cpp
+++ b/src/images/SkPngEncoder.cpp
@@ -53,7 +53,7 @@ public:
bool setHeader(const SkImageInfo& srcInfo, const SkPngEncoder::Options& options);
bool setPalette(const SkImageInfo& srcInfo, SkColorTable* colorTable,
SkTransferFunctionBehavior);
- bool setColorSpace(SkColorSpace* colorSpace);
+ bool setColorSpace(const SkImageInfo& info);
bool writeInfo(const SkImageInfo& srcInfo);
void chooseProc(const SkImageInfo& srcInfo, SkTransferFunctionBehavior unpremulBehavior);
@@ -355,8 +355,8 @@ bool SkPngEncoderMgr::setPalette(const SkImageInfo& srcInfo, SkColorTable* color
return true;
}
-static void set_icc(png_structp png_ptr, png_infop info_ptr, const SkColorSpace& colorSpace) {
- sk_sp<SkData> icc = icc_from_color_space(colorSpace);
+static void set_icc(png_structp png_ptr, png_infop info_ptr, const SkImageInfo& info) {
+ sk_sp<SkData> icc = icc_from_color_space(info);
if (!icc) {
return;
}
@@ -372,17 +372,15 @@ static void set_icc(png_structp png_ptr, png_infop info_ptr, const SkColorSpace&
png_set_iCCP(png_ptr, info_ptr, name, 0, iccPtr, icc->size());
}
-bool SkPngEncoderMgr::setColorSpace(SkColorSpace* colorSpace) {
+bool SkPngEncoderMgr::setColorSpace(const SkImageInfo& info) {
if (setjmp(png_jmpbuf(fPngPtr))) {
return false;
}
- if (colorSpace) {
- if (colorSpace->isSRGB()) {
- png_set_sRGB(fPngPtr, fInfoPtr, PNG_sRGB_INTENT_PERCEPTUAL);
- } else {
- set_icc(fPngPtr, fInfoPtr, *colorSpace);
- }
+ if (info.colorSpace() && info.colorSpace()->isSRGB()) {
+ png_set_sRGB(fPngPtr, fInfoPtr, PNG_sRGB_INTENT_PERCEPTUAL);
+ } else {
+ set_icc(fPngPtr, fInfoPtr, info);
}
return true;
@@ -429,7 +427,7 @@ std::unique_ptr<SkEncoder> SkPngEncoder::Make(SkWStream* dst, const SkPixmap& sr
return nullptr;
}
- if (!encoderMgr->setColorSpace(src.colorSpace())) {
+ if (!encoderMgr->setColorSpace(src.info())) {
return nullptr;
}