diff options
author | Hal Canary <halcanary@google.com> | 2016-11-23 20:41:22 -0500 |
---|---|---|
committer | Derek Sollenberger <djsollen@google.com> | 2016-12-07 13:29:42 +0000 |
commit | 10219fb261606fcc71c607167b28295b4578a10d (patch) | |
tree | 38b06a88ef8cd07c6d5517612c098d1a81880044 /cmds/screencap | |
parent | 4a7cda98fca86d1a1b7df78d302e3caaf07137e1 (diff) |
SkImageEncoder->SkEncodeImage
Test: none
Change-Id: I15630d2852d12840329181f135852e28d287bbcf
(cherry picked from commit 8c6bac4c77caeefb667bec90d16b5384fd2b2b31)
Diffstat (limited to 'cmds/screencap')
-rw-r--r-- | cmds/screencap/screencap.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp index a41f1224f9ec..377e29d99576 100644 --- a/cmds/screencap/screencap.cpp +++ b/cmds/screencap/screencap.cpp @@ -175,13 +175,20 @@ int main(int argc, char** argv) 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); } |