1 /*
2 * Copyright 2015 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 "SkBitmap.h"
9 #include "SkCommandLineFlags.h"
10 #include "SkCommonFlags.h"
11 #include "SkData.h"
12 #include "SkImage.h"
13 #include "SkStream.h"
14 #include "SkTypes.h"
15
16 #include "sk_tool_utils.h"
17
18 DEFINE_string(in, "input.png", "Input image");
19 DEFINE_string(out, "blurred.png", "Output image");
20 DEFINE_double(sigma, 1, "Sigma to be used for blur (> 0.0f)");
21
22
23 // This tool just performs a blur on an input image
24 // Return codes:
25 static const int kSuccess = 0;
26 static const int kError = 1;
27
main(int argc,char ** argv)28 int main(int argc, char** argv) {
29 SkCommandLineFlags::SetUsage("Brute force blur of an image.");
30 SkCommandLineFlags::Parse(argc, argv);
31
32 if (FLAGS_sigma <= 0) {
33 if (!FLAGS_quiet) {
34 SkDebugf("Sigma must be greater than zero (it is %f).\n", FLAGS_sigma);
35 }
36 return kError;
37 }
38
39 sk_sp<SkData> data(SkData::MakeFromFileName(FLAGS_in[0]));
40 if (nullptr == data) {
41 if (!FLAGS_quiet) {
42 SkDebugf("Couldn't open file: %s\n", FLAGS_in[0]);
43 }
44 return kError;
45 }
46
47 sk_sp<SkImage> image(SkImage::MakeFromEncoded(data));
48 if (!image) {
49 if (!FLAGS_quiet) {
50 SkDebugf("Couldn't create image for: %s.\n", FLAGS_in[0]);
51 }
52 return kError;
53 }
54
55 SkBitmap src;
56 if (!image->asLegacyBitmap(&src, SkImage::kRW_LegacyBitmapMode)) {
57 if (!FLAGS_quiet) {
58 SkDebugf("Couldn't create bitmap for: %s.\n", FLAGS_in[0]);
59 }
60 return kError;
61 }
62
63 SkBitmap dst = sk_tool_utils::slow_blur(src, (float) FLAGS_sigma);
64
65 if (!sk_tool_utils::EncodeImageToFile(FLAGS_out[0], dst, SkEncodedImageFormat::kPNG, 100)) {
66 if (!FLAGS_quiet) {
67 SkDebugf("Couldn't write to file: %s\n", FLAGS_out[0]);
68 }
69 return kError;
70 }
71
72 return kSuccess;
73 }
74