skhello.cpp revision ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976e
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 86413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkCanvas.h" 96413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkGraphics.h" 106413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com//#include "SkImageDecoder.h" 116413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkImageEncoder.h" 126413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com//#include "SkStream.h" 136413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkString.h" 146413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com#include "SkTemplates.h" 156413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 166413e79414b4a8e4111cfd4c35959d10d9312440reed@android.comstatic void show_help() { 176413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkDebugf("usage: skhello [-o out-dir] [-t 'hello']\n default output: skhello.png\n"); 186413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com} 196413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 206413e79414b4a8e4111cfd4c35959d10d9312440reed@android.comint main (int argc, char * const argv[]) { 216413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkAutoGraphics ag; 226413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkString path("skhello.png"); 236413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkString text("Hello"); 246413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 256413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com for (int i = 1; i < argc; i++) { 266413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com if (!strcmp(argv[i], "--help")) { 276413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com show_help(); 286413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com return 0; 296413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 306413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com if (!strcmp(argv[i], "-o")) { 316413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com if (i == argc-1) { 326413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkDebugf("ERROR: -o needs a following filename\n"); 336413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com return -1; 346413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 356413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com path.set(argv[i+1]); 366413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com i += 1; // skip the out dir name 376413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } else if (!strcmp(argv[i], "-t")) { 386413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com if (i == argc-1) { 396413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkDebugf("ERROR: -t needs a following string\n"); 406413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com return -1; 416413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 426413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com text.set(argv[i+1]); 436413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com i += 1; // skip the text string 446413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 456413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com } 466413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 476413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkPaint paint; 486413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint.setAntiAlias(true); 496413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint.setTextSize(SkIntToScalar(30)); 506413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkScalar width = paint.measureText(text.c_str(), text.size()); 516413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkScalar spacing = paint.getFontSpacing(); 526413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 536413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com int w = SkScalarRound(width) + 30; 546413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com int h = SkScalarRound(spacing) + 30; 556413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkBitmap bitmap; 566413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com bitmap.setConfig(SkBitmap::kARGB_8888_Config, w, h); 576413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com bitmap.allocPixels(); 586413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 596413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkCanvas canvas(bitmap); 606413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com canvas.drawColor(SK_ColorWHITE); 616413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 626413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint.setTextAlign(SkPaint::kCenter_Align); 636413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com canvas.drawText(text.c_str(), text.size(), 646413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkIntToScalar(w)/2, SkIntToScalar(h)*2/3, 656413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com paint); 666413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 67fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com bool success = SkImageEncoder::EncodeFile(path.c_str(), bitmap, 686413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com SkImageEncoder::kPNG_Type, 100); 69fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com if (!success) { 70fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com SkDebugf("--- failed to write %s\n", path.c_str()); 71fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com } 72fd9714e5bdcc9ecf873db45d9287e303b59678d2reed@android.com return !success; 736413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com} 746413e79414b4a8e4111cfd4c35959d10d9312440reed@android.com 75