diff options
author | Mike Reed <reed@google.com> | 2018-05-29 15:41:27 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-29 20:42:17 +0000 |
commit | f2c736400f03f8fe7fe356962c979f23df4d5f6b (patch) | |
tree | 809d21837d0701569cccd0e21f23e2ac5574007a /gm | |
parent | 4f078f7cfac6580dce6e213c022708922739ac6d (diff) |
support image-subsets in serialization
A follow-on API change *could* be to extend the SerialProcs to pass subset information
up to the client, in case they want to handle the subsetting step themselves.
Bug: skia:7983
Change-Id: I36d3f1ce439886384495485c3be3c591d611a135
Reviewed-on: https://skia-review.googlesource.com/130543
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'gm')
-rw-r--r-- | gm/image.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gm/image.cpp b/gm/image.cpp index fc91d6b7f1..2c1b8d8458 100644 --- a/gm/image.cpp +++ b/gm/image.cpp @@ -399,3 +399,36 @@ DEF_SIMPLE_GM(scalepixels_unpremul, canvas, 1080, 280) { canvas->translate(pm2.width() + 10.0f, 0); } } + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +static sk_sp<SkImage> make_lazy_image(SkSurface* surf) { + surf->getCanvas()->drawCircle(100, 100, 100, SkPaint()); + auto data = surf->makeImageSnapshot()->encodeToData(); + return SkImage::MakeFromEncoded(data); +} + +#include "SkWriteBuffer.h" +#include "SkReadBuffer.h" +static sk_sp<SkImage> serial_deserial(SkImage* img) { + SkBinaryWriteBuffer writer; + writer.writeImage(img); + size_t length = writer.bytesWritten(); + auto data = SkData::MakeUninitialized(length); + writer.writeToMemory(data->writable_data()); + + SkReadBuffer reader(data->data(), length); + return reader.readImage(); +} + +DEF_SIMPLE_GM(image_subset, canvas, 440, 220) { + SkImageInfo info = SkImageInfo::MakeN32Premul(200, 200, nullptr); + auto surf = sk_tool_utils::makeSurface(canvas, info, nullptr); + auto img = make_lazy_image(surf.get()); + + canvas->drawImage(img, 10, 10, nullptr); + auto sub = img->makeSubset({100, 100, 200, 200}); + canvas->drawImage(sub, 220, 10); + sub = serial_deserial(sub.get()); + canvas->drawImage(sub, 220+110, 10); +} |