summaryrefslogtreecommitdiff
path: root/cmds/screencap
diff options
context:
space:
mode:
authorHal Canary <halcanary@google.com>2016-11-23 20:41:22 -0500
committerDerek Sollenberger <djsollen@google.com>2016-12-07 13:29:42 +0000
commit10219fb261606fcc71c607167b28295b4578a10d (patch)
tree38b06a88ef8cd07c6d5517612c098d1a81880044 /cmds/screencap
parent4a7cda98fca86d1a1b7df78d302e3caaf07137e1 (diff)
SkImageEncoder->SkEncodeImage
Test: none Change-Id: I15630d2852d12840329181f135852e28d287bbcf (cherry picked from commit 8c6bac4c77caeefb667bec90d16b5384fd2b2b31)
Diffstat (limited to 'cmds/screencap')
-rw-r--r--cmds/screencap/screencap.cpp21
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);
}