OLD | NEW |
1 #include <sys/time.h> | 1 #include <sys/time.h> |
2 #include <sys/resource.h> | 2 #include <sys/resource.h> |
3 | 3 |
4 #include "SkCanvas.h" | 4 #include "SkCanvas.h" |
5 #include "SkCommandLineFlags.h" | 5 #include "SkCommandLineFlags.h" |
6 #include "SkData.h" | 6 #include "SkData.h" |
7 #include "SkForceLinking.h" | 7 #include "SkForceLinking.h" |
8 #include "SkGraphics.h" | 8 #include "SkGraphics.h" |
| 9 #include "SkImageDecoder.h" |
9 #include "SkImageEncoder.h" | 10 #include "SkImageEncoder.h" |
10 #include "SkImageInfo.h" | 11 #include "SkImageInfo.h" |
11 #include "SkStream.h" | 12 #include "SkStream.h" |
12 #include "SkSurface.h" | 13 #include "SkSurface.h" |
13 | 14 |
14 #include "seccomp_bpf.h" | 15 #include "seccomp_bpf.h" |
15 | 16 |
16 __SK_FORCE_IMAGE_DECODER_LINKING; | 17 __SK_FORCE_IMAGE_DECODER_LINKING; |
17 | 18 |
18 DEFINE_string(out, "", "Filename of the PNG to write to."); | 19 DEFINE_string(out, "", "Filename of the PNG to write to."); |
| 20 DEFINE_string(source, "", "Filename of the source image."); |
| 21 |
| 22 // Defined in template.cpp. |
| 23 extern SkBitmap source; |
19 | 24 |
20 static bool install_syscall_filter() { | 25 static bool install_syscall_filter() { |
21 struct sock_filter filter[] = { | 26 struct sock_filter filter[] = { |
22 /* Grab the system call number. */ | 27 /* Grab the system call number. */ |
23 EXAMINE_SYSCALL, | 28 EXAMINE_SYSCALL, |
24 /* List allowed syscalls. */ | 29 /* List allowed syscalls. */ |
25 ALLOW_SYSCALL(exit_group), | 30 ALLOW_SYSCALL(exit_group), |
26 ALLOW_SYSCALL(exit), | 31 ALLOW_SYSCALL(exit), |
27 ALLOW_SYSCALL(fstat), | 32 ALLOW_SYSCALL(fstat), |
28 ALLOW_SYSCALL(read), | 33 ALLOW_SYSCALL(read), |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 extern void draw(SkCanvas* canvas); | 87 extern void draw(SkCanvas* canvas); |
83 | 88 |
84 int main(int argc, char** argv) { | 89 int main(int argc, char** argv) { |
85 SkCommandLineFlags::Parse(argc, argv); | 90 SkCommandLineFlags::Parse(argc, argv); |
86 SkAutoGraphics init; | 91 SkAutoGraphics init; |
87 | 92 |
88 if (FLAGS_out.count() == 0) { | 93 if (FLAGS_out.count() == 0) { |
89 perror("The --out flag must have an argument."); | 94 perror("The --out flag must have an argument."); |
90 return 1; | 95 return 1; |
91 } | 96 } |
| 97 |
| 98 if (FLAGS_source.count() == 1) { |
| 99 if (!SkImageDecoder::DecodeFile(FLAGS_source[0], &source)) { |
| 100 perror("Unable to read the source image."); |
| 101 } |
| 102 } |
| 103 |
92 SkFILEWStream stream(FLAGS_out[0]); | 104 SkFILEWStream stream(FLAGS_out[0]); |
93 | 105 |
94 SkImageInfo info = SkImageInfo::MakeN32(256, 256, kPremul_SkAlphaType); | 106 SkImageInfo info = SkImageInfo::MakeN32(256, 256, kPremul_SkAlphaType); |
95 SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); | 107 SkAutoTUnref<SkSurface> surface(SkSurface::NewRaster(info)); |
96 SkCanvas* canvas = surface->getCanvas(); | 108 SkCanvas* canvas = surface->getCanvas(); |
97 | 109 |
98 setLimits(); | 110 setLimits(); |
99 | 111 |
100 if (!install_syscall_filter()) { | 112 if (!install_syscall_filter()) { |
101 return 1; | 113 return 1; |
102 } | 114 } |
103 | 115 |
104 draw(canvas); | 116 draw(canvas); |
105 | 117 |
106 // Write out the image as a PNG. | 118 // Write out the image as a PNG. |
107 SkAutoTUnref<SkImage> image(surface->newImageSnapshot()); | 119 SkAutoTUnref<SkImage> image(surface->newImageSnapshot()); |
108 SkAutoTUnref<SkData> data(image->encode(SkImageEncoder::kPNG_Type, 100)); | 120 SkAutoTUnref<SkData> data(image->encode(SkImageEncoder::kPNG_Type, 100)); |
109 if (NULL == data.get()) { | 121 if (NULL == data.get()) { |
110 printf("Failed to encode\n"); | 122 printf("Failed to encode\n"); |
111 exit(1); | 123 exit(1); |
112 } | 124 } |
113 stream.write(data->data(), data->size()); | 125 stream.write(data->data(), data->size()); |
114 } | 126 } |
OLD | NEW |