diff options
author | 2017-05-05 11:13:26 -0400 | |
---|---|---|
committer | 2017-05-05 16:34:13 +0000 | |
commit | c367d03fb04fccdc63b1379cf74ddc1cab842039 (patch) | |
tree | 34bf729ad13945d6351874c547edef2064c7415c /src/images/SkImageEncoder.cpp | |
parent | 243ed375544de7446037fde6ad29944d5eda54bf (diff) |
Add support for row-by-row png encodes
Also adds a SkEncoder base class.
Bug: 713862
Change-Id: Ia3f009cd9f376514f6c19396245fab3a43ae6536
Reviewed-on: https://skia-review.googlesource.com/15152
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
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; +} |