aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2018-05-29 15:41:27 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-29 20:42:17 +0000
commitf2c736400f03f8fe7fe356962c979f23df4d5f6b (patch)
tree809d21837d0701569cccd0e21f23e2ac5574007a /gm
parent4f078f7cfac6580dce6e213c022708922739ac6d (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.cpp33
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);
+}