• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "picture_utils.h"
9 #include "SkBitmap.h"
10 #include "SkColorPriv.h"
11 #include "SkImageEncoder.h"
12 #include "SkOSFile.h"
13 #include "SkPicture.h"
14 #include "SkStream.h"
15 #include "SkString.h"
16 
17 namespace sk_tools {
force_all_opaque(const SkBitmap & bitmap)18     void force_all_opaque(const SkBitmap& bitmap) {
19         SkASSERT(nullptr == bitmap.getTexture());
20         SkASSERT(kN32_SkColorType == bitmap.colorType());
21         if (bitmap.getTexture() || kN32_SkColorType == bitmap.colorType()) {
22             return;
23         }
24 
25         SkAutoLockPixels lock(bitmap);
26         for (int y = 0; y < bitmap.height(); y++) {
27             for (int x = 0; x < bitmap.width(); x++) {
28                 *bitmap.getAddr32(x, y) |= (SK_A32_MASK << SK_A32_SHIFT);
29             }
30         }
31     }
32 
replace_char(SkString * str,const char oldChar,const char newChar)33     void replace_char(SkString* str, const char oldChar, const char newChar) {
34         if (nullptr == str) {
35             return;
36         }
37         for (size_t i = 0; i < str->size(); ++i) {
38             if (oldChar == str->operator[](i)) {
39                 str->operator[](i) = newChar;
40             }
41         }
42     }
43 
is_percentage(const char * const string)44     bool is_percentage(const char* const string) {
45         SkString skString(string);
46         return skString.endsWith("%");
47     }
48 
setup_bitmap(SkBitmap * bitmap,int width,int height)49     void setup_bitmap(SkBitmap* bitmap, int width, int height) {
50         bitmap->allocN32Pixels(width, height);
51         bitmap->eraseColor(SK_ColorTRANSPARENT);
52     }
53 
write_bitmap_to_disk(const SkBitmap & bm,const SkString & dirPath,const char * subdirOrNull,const SkString & baseName)54     bool write_bitmap_to_disk(const SkBitmap& bm, const SkString& dirPath,
55                               const char *subdirOrNull, const SkString& baseName) {
56         SkString partialPath;
57         if (subdirOrNull) {
58             partialPath = SkOSPath::Join(dirPath.c_str(), subdirOrNull);
59             sk_mkdir(partialPath.c_str());
60         } else {
61             partialPath.set(dirPath);
62         }
63         SkString fullPath = SkOSPath::Join(partialPath.c_str(), baseName.c_str());
64         if (SkImageEncoder::EncodeFile(fullPath.c_str(), bm, SkImageEncoder::kPNG_Type, 100)) {
65             return true;
66         } else {
67             SkDebugf("Failed to write the bitmap to %s.\n", fullPath.c_str());
68             return false;
69         }
70     }
71 
72 } // namespace sk_tools
73