comparison horori/eraline/src/eraline.cpp @ 0:aaaa401818a1 draft

first commit.
author pyon <pyon@macmini>
date Mon, 24 May 2021 21:32:58 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:aaaa401818a1
1 /* eraline.cpp
2 * Last Change: 2021-02-10 水 12:00:54.
3 * by T.Mutoh
4 *
5 * > eraline y h in.tif out.tif
6 * > eraline -v x h in.tif out.tif
7 */
8 #include "wx/wxprec.h"
9
10 #include <wx/wx.h>
11 #include <wx/app.h>
12 #include <wx/cmdline.h>
13
14 wxString inimg;
15 wxString outimg;
16
17 static const wxCmdLineEntryDesc cmdLineDesc[] = {
18 {wxCMD_LINE_SWITCH, "h", "help", "show this help message", wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP},
19 {wxCMD_LINE_SWITCH, "d", "dummy", "a dummy switch", wxCMD_LINE_VAL_NONE, 0},
20 {wxCMD_LINE_SWITCH, "v", "vertical", "a secret switch", wxCMD_LINE_VAL_NONE, wxCMD_LINE_HIDDEN},
21 // ... your other command line options here...
22
23 wxCMD_LINE_DESC_END
24 };
25
26 void erase(int y, int h) {
27 wxImage img(inimg, wxBITMAP_TYPE_TIFF);
28
29 int r, g, b;
30 int th = 38;
31 int p = 0;
32 /*
33 for (int x = 0; x < img.GetWidth(); x++) {
34 r = (int)img.GetRed(x, y);
35 g = (int)img.GetGreen(x, y);
36 b = (int)img.GetBlue(x, y);
37 //wxString buf = wxString::Format("%d %d %d -> ", r, g, b);
38 //wxPrintf(buf);
39
40 r += (int)img.GetRed(x, y - 1);
41 g += (int)img.GetGreen(x, y - 1);
42 b += (int)img.GetBlue(x, y - 1);
43
44 r += (int)img.GetRed(x, y + 1);
45 g += (int)img.GetGreen(x, y + 1);
46 b += (int)img.GetBlue(x, y + 1);
47
48 r /= 3;
49 g /= 3;
50 b /= 3;
51 img.SetRGB(x, y, (unsigned char)r, (unsigned char)g, (unsigned char)b);
52
53 //buf = wxString::Format("%d %d %d\n", r, g, b);
54 //wxPrintf(buf);
55 }
56 */
57 /*
58 switch (h) {
59 case 1:
60 break;
61
62 case 2:
63 break;
64
65 case 3:
66 break;
67
68 case 4:
69 for (int x = 0; x < img.GetWidth(); x++) {
70 r = (int)img.GetRed(x, y - 1);
71 g = (int)img.GetGreen(x, y - 1);
72 b = (int)img.GetBlue(x, y - 1);
73 if (r > th && g > th && b > th - 1) p++;
74
75 for (int d = 0; d < 4; d++) {
76 r = (int)img.GetRed(x, y + d);
77 g = (int)img.GetGreen(x, y + d);
78 b = (int)img.GetBlue(x, y + d);
79 if (r < th && g < th && b < th - 1) p++;
80 }
81
82 r = (int)img.GetRed(x, y + 4);
83 g = (int)img.GetGreen(x, y + 4);
84 b = (int)img.GetBlue(x, y + 4);
85 if (r > th && g > th && b > th - 4) p++;
86
87 if (p == 6) {
88 for (int d = 0; d < 4; d++)
89 img.SetRGB(x, y + d, 0, 0, 0);
90 }
91 }
92 break;
93
94 default:
95 break;
96 }
97 */
98 for (int x = 0; x < img.GetWidth(); x++) {
99 bool bt, bb;
100 r = (int)img.GetRed(x, y - 1);
101 g = (int)img.GetGreen(x, y - 1);
102 b = (int)img.GetBlue(x, y - 1);
103 if (r > th && g > th && b > th - 1) bt = true;
104
105 r = (int)img.GetRed(x, y + h);
106 g = (int)img.GetGreen(x, y + h);
107 b = (int)img.GetBlue(x, y + h);
108 if (r > th && g > th && b > th - 1) bb = true;
109
110 if (bt && bb) {
111 for (int d = 0; d < h; d++)
112 img.SetRGB(x, y + d, 0, 0, 0);
113 }
114 }
115
116 img.SetOption(wxIMAGE_OPTION_TIFF_COMPRESSION, 5);
117 img.SetOption(wxIMAGE_OPTION_TIFF_BITSPERSAMPLE, 1);
118 img.SaveFile(outimg);
119 }
120
121 int main(int argc, char **argv) {
122 wxApp::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE, "program");
123
124 wxInitializer initializer;
125 if (!initializer) {
126 fprintf(stderr, "Failed to initialize the wxWidgets library, aborting.");
127 return -1;
128 }
129
130 wxCmdLineParser parser(cmdLineDesc, argc, argv);
131
132 wxImage::AddHandler(new wxTIFFHandler);
133
134 /*
135 switch (parser.Parse()) {
136 case -1:
137 // help was given, terminating
138 wxPuts("help");
139 break;
140
141 case 0:
142 // everything is ok; proceed
143 if (parser.Found("d")) {
144 wxPrintf("Dummy switch was given...\n");
145 }
146 if (parser.Found("v")) {
147 wxPrintf("Vertical switch was given... %s\n", argv[0]);
148 int t = wxAtoi(argv[2]);
149 int d = wxAtoi(argv[3]);
150 inimg = argv[4];
151 outimg = argv[5];
152 //v1(t);
153 }
154 break;
155
156 default:
157 wxPrintf("??? switch was given... \n");
158 break;
159 }
160 */
161
162 int y = wxAtoi(argv[1]);
163 int h = wxAtoi(argv[2]);
164 inimg = argv[3];
165 outimg = argv[4];
166
167 erase(y, h);
168
169 return 0;
170 }
171
172