Index: tools/flatten.cpp |
diff --git a/tools/flatten.cpp b/tools/flatten.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..832bd1426d5103d1c9518cf8868def76bd4884ba |
--- /dev/null |
+++ b/tools/flatten.cpp |
@@ -0,0 +1,49 @@ |
+/* |
+ * Copyright 2015 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "SkData.h" |
+#include "SkForceLinking.h" |
+#include "SkImageGenerator.h" |
+#include "SkPicture.h" |
+#include "SkPictureRecorder.h" |
+#include "SkStream.h" |
+#include <stdio.h> |
+ |
+__SK_FORCE_IMAGE_DECODER_LINKING; |
+ |
+#define ASSERTF(cond, fmt, ...) if (!(cond)) { fprintf(stderr, fmt"\n", __VA_ARGS__); exit(1); } |
+ |
+static bool lazy_decode_bitmap(const void* src, size_t size, SkBitmap* dst) { |
+ SkAutoTUnref<SkData> encoded(SkData::NewWithCopy(src, size)); |
+ return encoded && SkInstallDiscardablePixelRef(encoded, dst); |
+} |
+ |
+int main(int argc, char** argv) { |
+ ASSERTF(argc == 3, "usage: %s nested.skp flat.skp", argv[0]); |
+ const char *nestedPath = argv[1], |
+ *flatPath = argv[2]; |
+ |
+ // Read nested.skp. |
+ SkFILEStream stream(nestedPath); |
+ ASSERTF(stream.isValid(), "Couldn't read %s.", nestedPath); |
+ SkAutoTUnref<const SkPicture> nested(SkPicture::CreateFromStream(&stream, &lazy_decode_bitmap)); |
+ ASSERTF(nested, "Couldn't parse %s as a picture.", nestedPath); |
+ |
+ // Play it back into a new picture using kPlaybackDrawPicture_RecordFlag. |
+ SkPictureRecorder recorder; |
+ uint32_t flags = SkPictureRecorder::kPlaybackDrawPicture_RecordFlag; |
+ nested->playback(recorder.beginRecording(nested->cullRect(), nullptr, flags)); |
+ SkAutoTUnref<const SkPicture> flat(recorder.endRecordingAsPicture()); |
+ |
+ // Write out that flat.skp |
+ SkFILEWStream wstream(flatPath); |
+ ASSERTF(wstream.isValid(), "Could not open %s.", flatPath); |
+ flat->serialize(&wstream); |
+ wstream.flush(); |
+ |
+ return 0; |
+} |