diff options
author | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-04-24 19:52:53 +0000 |
---|---|---|
committer | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-04-24 19:52:53 +0000 |
commit | af459795e393dabd8ea02afade5609935c0d9509 (patch) | |
tree | b797c7c960d3434e88ccab02905f7f172e96103b /tools | |
parent | 543ed9352c7dfd93071c08b14930cca2e82a08d4 (diff) |
add skiamge (in tools/) that decodes and encodes images
git-svn-id: http://skia.googlecode.com/svn/trunk@160 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tools')
-rw-r--r-- | tools/skimage_main.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/tools/skimage_main.cpp b/tools/skimage_main.cpp new file mode 100644 index 0000000000..575078c62e --- /dev/null +++ b/tools/skimage_main.cpp @@ -0,0 +1,107 @@ +#include "SkBitmap.h" +#include "SkGraphics.h" +#include "SkImageDecoder.h" +#include "SkImageEncoder.h" +#include "SkStream.h" +#include "SkTemplates.h" + +static bool decodeFile(SkBitmap* bitmap, const char srcPath[]) { + SkFILEStream stream(srcPath); + if (!stream.isValid()) { + SkDebugf("ERROR: bad filename <%s>\n", srcPath); + return false; + } + + SkImageDecoder* codec = SkImageDecoder::Factory(&stream); + if (NULL == codec) { + SkDebugf("ERROR: no codec found for <%s>\n", srcPath); + return false; + } + + SkAutoTDelete<SkImageDecoder> ad(codec); + + stream.rewind(); + if (!codec->decode(&stream, bitmap, SkBitmap::kARGB_8888_Config, + SkImageDecoder::kDecodePixels_Mode)) { + SkDebugf("ERROR: codec failed for <%s>\n", srcPath); + return false; + } + return true; +} + +/////////////////////////////////////////////////////////////////////////////// + +class SkAutoGraphics { +public: + SkAutoGraphics() { + SkGraphics::Init(); + } + ~SkAutoGraphics() { + SkGraphics::Term(); + } +}; + +static void show_help() { + SkDebugf("usage: skiamge [-o out-dir] inputfiles...\n"); +} + +static void make_outname(SkString* dst, const char outDir[], const char src[]) { + dst->set(outDir); + const char* start = strrchr(src, '/'); + if (start) { + start += 1; // skip the actual last '/' + } else { + start = src; + } + dst->append(start); + dst->append(".png"); +} + +int main (int argc, char * const argv[]) { + SkAutoGraphics ag; + int i, outDirIndex = 0; + SkString outDir; + + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i], "-help")) { + show_help(); + return 0; + } + if (!strcmp(argv[i], "-o")) { + if (i == argc-1) { + SkDebugf("ERROR: -o needs a following filename\n"); + return -1; + } + outDirIndex = i; + outDir.set(argv[i+1]); + if (outDir.c_str()[outDir.size() - 1] != '/') { + outDir.append("/"); + } + i += 1; // skip the out dir name + } + } + + for (i = 1; i < argc; i++) { + if (i == outDirIndex) { + i += 1; // skip this and the next entry + continue; + } + + SkBitmap bitmap; + if (decodeFile(&bitmap, argv[i])) { + if (outDirIndex) { + SkString outPath; + make_outname(&outPath, outDir.c_str(), argv[i]); + SkDebugf(" writing %s\n", outPath.c_str()); + SkImageEncoder::EncodeFile(outPath.c_str(), bitmap, + SkImageEncoder::kPNG_Type, 100); + } else { + SkDebugf(" decoded %s [%d %d]\n", argv[i], bitmap.width(), + bitmap.height()); + } + } + } + + return 0; +} + |