SkImageEncoder->SkEncodeImage

Test: none
Change-Id: I15630d2852d12840329181f135852e28d287bbcf
(cherry picked from commit 8c6bac4c77caeefb667bec90d16b5384fd2b2b31)
diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp
index a41f122..377e29d 100644
--- a/cmds/screencap/screencap.cpp
+++ b/cmds/screencap/screencap.cpp
@@ -175,13 +175,20 @@
 
     if (base != NULL) {
         if (png) {
-            const SkImageInfo info = SkImageInfo::Make(w, h, flinger2skia(f),
-                                                       kPremul_SkAlphaType);
-            sk_sp<SkData> data(SkImageEncoder::EncodeData(info, base, s*bytesPerPixel(f),
-                    SkImageEncoder::kPNG_Type, SkImageEncoder::kDefaultQuality));
-            if (data.get()) {
-                write(fd, data->data(), data->size());
-            }
+            const SkImageInfo info =
+                SkImageInfo::Make(w, h, flinger2skia(f), kPremul_SkAlphaType);
+            SkPixmap pixmap(info, base, s * bytesPerPixel(f));
+            struct FDWStream final : public SkWStream {
+              size_t fBytesWritten = 0;
+              int fFd;
+              FDWStream(int f) : fFd(f) {}
+              size_t bytesWritten() const override { return fBytesWritten; }
+              bool write(const void* buffer, size_t size) override {
+                fBytesWritten += size;
+                return size == 0 || ::write(fFd, buffer, size) > 0;
+              }
+            } fdStream(fd);
+            (void)SkEncodeImage(&fdStream, pixmap, SkEncodedImageFormat::kPNG, 100);
             if (fn != NULL) {
                 notifyMediaScanner(fn);
             }