1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkBitmap.h" 9 #include "SkCanvas.h" 10 #include "SkGraphics.h" 11 #include "SkOSFile.h" 12 #include "SkPicture.h" 13 #include "SkStream.h" 14 #include "SkString.h" 15 #include "SkDumpCanvas.h" 16 17 static sk_sp<SkPicture> inspect(const char path[]) { 18 SkFILEStream stream(path); 19 if (!stream.isValid()) { 20 printf("-- Can't open '%s'\n", path); 21 return nullptr; 22 } 23 24 printf("Opening '%s'...\n", path); 25 26 { 27 int32_t header[3]; 28 if (stream.read(header, sizeof(header)) != sizeof(header)) { 29 printf("-- Failed to read header (12 bytes)\n"); 30 return nullptr; 31 } 32 printf("version:%d width:%d height:%d\n", header[0], header[1], header[2]); 33 } 34 35 stream.rewind(); 36 auto pic = SkPicture::MakeFromStream(&stream); 37 if (nullptr == pic) { 38 SkDebugf("Could not create SkPicture: %s\n", path); 39 return nullptr; 40 } 41 printf("picture cullRect: [%f %f %f %f]\n", 42 pic->cullRect().fLeft, pic->cullRect().fTop, 43 pic->cullRect().fRight, pic->cullRect().fBottom); 44 return pic; 45 } 46 47 static void dumpOps(SkPicture* pic) { 48 #ifdef SK_DEBUG 49 SkDebugfDumper dumper; 50 SkDumpCanvas canvas(&dumper); 51 canvas.drawPicture(pic); 52 #else 53 printf("SK_DEBUG mode not enabled\n"); 54 #endif 55 } 56 57 int main(int argc, char** argv) { 58 SkAutoGraphics ag; 59 if (argc < 2) { 60 printf("Usage: pinspect [--dump-ops] filename [filename ...]\n"); 61 return 1; 62 } 63 64 bool doDumpOps = false; 65 66 int index = 1; 67 if (!strcmp(argv[index], "--dump-ops")) { 68 index += 1; 69 doDumpOps = true; 70 } 71 72 for (; index < argc; ++index) { 73 auto pic(inspect(argv[index])); 74 if (doDumpOps) { 75 dumpOps(pic.get()); 76 } 77 if (index < argc - 1) { 78 printf("\n"); 79 } 80 } 81 return 0; 82 } 83