14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2012 Google Inc. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * found in the LICENSE file. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "picture_utils.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "SkBitmap.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "SkColorPriv.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "SkImageEncoder.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkOSFile.h" 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "SkPicture.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkStream.h" 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "SkString.h" 16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace sk_tools { 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void force_all_opaque(const SkBitmap& bitmap) { 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkASSERT(NULL == bitmap.getTexture()); 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SkASSERT(kN32_SkColorType == bitmap.colorType()); 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (NULL != bitmap.getTexture() || kN32_SkColorType == bitmap.colorType()) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkAutoLockPixels lock(bitmap); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int y = 0; y < bitmap.height(); y++) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int x = 0; x < bitmap.width(); x++) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *bitmap.getAddr32(x, y) |= (SK_A32_MASK << SK_A32_SHIFT); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void replace_char(SkString* str, const char oldChar, const char newChar) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (NULL == str) { 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (size_t i = 0; i < str->size(); ++i) { 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (oldChar == str->operator[](i)) { 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) str->operator[](i) = newChar; 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_percentage(const char* const string) { 4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SkString skString(string); 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return skString.endsWith("%"); 4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) void setup_bitmap(SkBitmap* bitmap, int width, int height) { 5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bitmap->allocN32Pixels(width, height); 5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bitmap->eraseColor(SK_ColorTRANSPARENT); 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool write_bitmap_to_disk(const SkBitmap& bm, const SkString& dirPath, 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const char *subdirOrNull, const SkString& baseName) { 5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SkString partialPath; 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (subdirOrNull) { 5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) partialPath = SkOSPath::SkPathJoin(dirPath.c_str(), subdirOrNull); 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) sk_mkdir(partialPath.c_str()); 6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } else { 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) partialPath.set(dirPath); 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SkString fullPath = SkOSPath::SkPathJoin(partialPath.c_str(), baseName.c_str()); 6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (SkImageEncoder::EncodeFile(fullPath.c_str(), bm, SkImageEncoder::kPNG_Type, 100)) { 6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return true; 6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } else { 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SkDebugf("Failed to write the bitmap to %s.\n", fullPath.c_str()); 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace sk_tools 7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)