diff options
Diffstat (limited to 'src/images/SkImageEncoder.cpp')
-rw-r--r-- | src/images/SkImageEncoder.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/images/SkImageEncoder.cpp b/src/images/SkImageEncoder.cpp index 23f46e4982..2daba483c5 100644 --- a/src/images/SkImageEncoder.cpp +++ b/src/images/SkImageEncoder.cpp @@ -7,6 +7,7 @@ #include "SkImageEncoderPriv.h" #include "SkJpegEncoder.h" +#include "SkPngEncoder.h" bool SkEncodeImage(SkWStream* dst, const SkPixmap& src, SkEncodedImageFormat format, int quality) { @@ -22,8 +23,11 @@ bool SkEncodeImage(SkWStream* dst, const SkPixmap& src, opts.fQuality = quality; return SkJpegEncoder::Encode(dst, src, opts); } - case SkEncodedImageFormat::kPNG: - return SkEncodeImageAsPNG(dst, src, SkEncodeOptions()); + case SkEncodedImageFormat::kPNG: { + SkPngEncoder::Options opts; + opts.fUnpremulBehavior = SkTransferFunctionBehavior::kIgnore; + return SkPngEncoder::Encode(dst, src, opts); + } case SkEncodedImageFormat::kWEBP: return SkEncodeImageAsWEBP(dst, src, quality); default: @@ -31,3 +35,22 @@ bool SkEncodeImage(SkWStream* dst, const SkPixmap& src, } #endif } + +bool SkEncoder::encodeRows(int numRows) { + SkASSERT(numRows > 0 && fCurrRow < fSrc.height()); + if (numRows <= 0 || fCurrRow >= fSrc.height()) { + return false; + } + + if (fCurrRow + numRows > fSrc.height()) { + numRows = fSrc.height() - fCurrRow; + } + + if (!this->onEncodeRows(numRows)) { + // If we fail, short circuit any future calls. + fCurrRow = fSrc.height(); + return false; + } + + return true; +} |