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 #ifndef picture_utils_DEFINED 9 #define picture_utils_DEFINED 10 11 #include "SkBitmap.h" 12 13 class SkData; 14 class SkString; 15 16 namespace sk_tools { 17 // since PNG insists on unpremultiplying our alpha, we take no precision 18 // chances and force all pixels to be 100% opaque, otherwise on compare we 19 // may not get a perfect match. 20 // 21 // This expects a bitmap with a config type of 8888 and for the pixels to 22 // not be on the GPU. 23 void force_all_opaque(const SkBitmap& bitmap); 24 25 /** 26 * Replaces all instances of oldChar with newChar in str. 27 */ 28 void replace_char(SkString* str, const char oldChar, const char newChar); 29 30 // Returns true if the string ends with % 31 bool is_percentage(const char* const string); 32 33 // Prepares the bitmap so that it can be written. 34 // 35 // Specifically, it configures the bitmap, allocates pixels and then 36 // erases the pixels to transparent black. 37 void setup_bitmap(SkBitmap* bitmap, int width, int height); 38 39 /** 40 * Write a bitmap file to disk. 41 * 42 * @param bm the bitmap to record 43 * @param dirPath directory within which to write the image file 44 * @param subdirOrNull subdirectory within dirPath, or nullptr to just write into dirPath 45 * @param baseName last part of the filename 46 * 47 * @return true if written out successfully 48 */ 49 bool write_bitmap_to_disk(const SkBitmap& bm, const SkString& dirPath, 50 const char *subdirOrNull, const SkString& baseName); 51 52 // Return raw unpremultiplied RGBA bytes, suitable for storing in a PNG. The output 53 // colors are assumed to be sRGB values. This is only guaranteed to work for the 54 // cases that are currently emitted by tools: 55 // Linear premul 8888, sRGB premul 8888, Linear premul F16 56 sk_sp<SkData> encode_bitmap_for_png(SkBitmap bitmap); 57 58 } // namespace sk_tools 59 60 #endif // picture_utils_DEFINED 61