add skiamge (in tools/) that decodes and encodes images
git-svn-id: http://skia.googlecode.com/svn/trunk@160 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
543ed9352c
commit
af459795e3
14
Makefile
14
Makefile
@ -123,6 +123,19 @@ tests: $(TESTS_OBJS) out/libskia.a
|
||||
|
||||
##############################################################################
|
||||
|
||||
SKIMAGE_SRCS := skimage_main.cpp
|
||||
|
||||
SKIMAGE_SRCS := $(addprefix tools/, $(SKIMAGE_SRCS))
|
||||
|
||||
SKIMAGE_OBJS := $(SKIMAGE_SRCS:.cpp=.o)
|
||||
SKIMAGE_OBJS := $(addprefix out/, $(SKIMAGE_OBJS))
|
||||
|
||||
skimage: $(SKIMAGE_OBJS) out/libskia.a
|
||||
@echo "linking skimage..."
|
||||
$(HIDE)g++ $(SKIMAGE_OBJS) out/libskia.a -o out/tools/skimage $(LINKER_OPTS)
|
||||
|
||||
##############################################################################
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(HIDE)rm -rf out
|
||||
@ -132,6 +145,7 @@ help:
|
||||
@echo "Targets:"
|
||||
@echo " <default>: out/libskia.a"
|
||||
@echo " bench: out/bench/bench"
|
||||
@echo " skimage: out/tools/skimage"
|
||||
@echo " tests: out/tests/tests"
|
||||
@echo " clean: removes entire out/ directory"
|
||||
@echo " help: this text"
|
||||
|
107
tools/skimage_main.cpp
Normal file
107
tools/skimage_main.cpp
Normal file
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user