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