Mercurial > mercurial > hgweb_searcher03.cgi
comparison src/marksheet.cpp @ 2:c066fde99517
Added Batch Print Mode.
author | pyon@macmini |
---|---|
date | Fri, 23 Aug 2013 18:32:09 +0900 |
parents | |
children | fdba695b99f1 |
comparison
equal
deleted
inserted
replaced
1:7b6dab24f4b8 | 2:c066fde99517 |
---|---|
1 // Filename : marksheet.cpp | |
2 // Last Change: 23-Aug-2013. | |
3 // | |
4 | |
5 #include "common.h" | |
6 #include "marksheet.h" | |
7 | |
8 bool IsBlack( int r, int g, int b ) | |
9 { | |
10 if ( r == 0 && g == 0 && b == 0 ) { | |
11 return true; | |
12 } | |
13 return false; | |
14 } | |
15 | |
16 wxString GuessHhs( wxString& file ) | |
17 { | |
18 wxString hhs; | |
19 wxImage img( file, wxBITMAP_TYPE_JPEG ); | |
20 int sx = 1800; // start x | |
21 int sy = 315;; // start y | |
22 int bw = 60; // block width | |
23 int bh = 50; // block height | |
24 int area = bw * bh; | |
25 int black = 0; | |
26 int x, y; | |
27 unsigned char r, g, b; | |
28 | |
29 int max_n; | |
30 float max; | |
31 float bk; | |
32 for ( int c=0; c<10; c++ ) { | |
33 max = 0.0; | |
34 max_n = -1; | |
35 for ( int n=0; n<10; n++ ) { | |
36 | |
37 for ( x=sx+bw*c; x<sx+bw*(c+1); x++ ) { | |
38 for ( y=sy+bh*n; y<sy+bh*(n+1); y++ ) { | |
39 r = img.GetRed( x, y ); | |
40 g = img.GetGreen( x, y ); | |
41 b = img.GetBlue( x, y ); | |
42 if( IsBlack( (int)r, (int)g, (int)b ) ) black++; | |
43 } | |
44 } | |
45 | |
46 bk = (float)black / area; | |
47 if ( max < bk ) { | |
48 max = bk; | |
49 max_n = n; | |
50 } | |
51 //wxPuts(wxString::Format(wxT("%d %f"),n,bk)); | |
52 black = 0; | |
53 } | |
54 hhs.Append( wxString::Format( wxT("%d"), max_n ) ); | |
55 } | |
56 | |
57 return hhs; | |
58 } | |
59 | |
60 bool IsMarksheet( wxString& file, float* brate, long* len, double zmin, double zmax, long lmin, long lmax ) | |
61 { | |
62 wxImage img( file, wxBITMAP_TYPE_JPEG ); | |
63 int black = 0; | |
64 int x = 2465; | |
65 int h = 3500; | |
66 unsigned char r, g, b; | |
67 | |
68 for ( int y=0; y<h; y++ ) { | |
69 r = img.GetRed( x, y ); | |
70 g = img.GetGreen( x, y ); | |
71 b = img.GetBlue( x, y ); | |
72 if( IsBlack( (int)r, (int)g, (int)b ) ) black++; | |
73 } | |
74 float z = (float)black / h; | |
75 | |
76 wxFile f( file ); | |
77 long l = f.Length(); | |
78 | |
79 *brate = z; | |
80 *len = l; | |
81 //wxPuts(wxString::Format(wxT("z = %f, len = %d"),z,len)); | |
82 if ( zmin < z && z < zmax | |
83 && lmin < l && l < lmax ) { | |
84 return true; | |
85 } | |
86 return false; | |
87 } | |
88 | |
89 bool _IsMarksheet( wxString& file, float* brate, long* len ) | |
90 { | |
91 wxImage img( file, wxBITMAP_TYPE_JPEG ); | |
92 int black = 0; | |
93 int x = 2465; | |
94 int h = 3500; | |
95 unsigned char r, g, b; | |
96 | |
97 for ( int y=0; y<h; y++ ) { | |
98 r = img.GetRed( x, y ); | |
99 g = img.GetGreen( x, y ); | |
100 b = img.GetBlue( x, y ); | |
101 if( IsBlack( (int)r, (int)g, (int)b ) ) black++; | |
102 } | |
103 float z = (float)black / h; | |
104 float zmin = 0.095713; float zmax = 0.108600; | |
105 | |
106 wxFile f( file ); | |
107 long l = f.Length(); | |
108 float lmin = 2072393; float lmax = 2346082; | |
109 | |
110 *brate = z; | |
111 *len = l; | |
112 //wxPuts(wxString::Format(wxT("z = %f, len = %d"),z,len)); | |
113 if ( zmin < z && z < zmax | |
114 && lmin < l && l < lmax ) { | |
115 return true; | |
116 } | |
117 return false; | |
118 } | |
119 | |
120 wxString GetHhsName( wxString& hhsno ) | |
121 { | |
122 wxString name; | |
123 | |
124 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("hhs.db"); | |
125 wxSQLite3Database hhsdb; | |
126 hhsdb.Open( gszFile ); | |
127 | |
128 wxSQLite3Statement stmt = hhsdb.PrepareStatement("SELECT name FROM hhs_master WHERE hhsno = ?"); | |
129 stmt.Bind( 1, hhsno ); | |
130 wxSQLite3ResultSet q = stmt.ExecuteQuery(); | |
131 if ( !q.IsNull(0) ) { | |
132 while ( q.NextRow() ) { | |
133 name = q.GetString(0); | |
134 } | |
135 } | |
136 stmt.Finalize(); | |
137 hhsdb.Close(); | |
138 | |
139 return name; | |
140 } | |
141 | |
142 int IsHhsno( wxString& hhsno, wxString& name ) | |
143 { | |
144 wxRegEx reHhs(wxT("^0[1238][0-9]{8}$")); // 被保番チェック | |
145 | |
146 if ( reHhs.Matches( hhsno) ) { | |
147 name = GetHhsName( hhsno ); | |
148 if ( name.IsEmpty() ) { // DBにない | |
149 return 1; | |
150 } | |
151 return 2; | |
152 } | |
153 else { | |
154 return 0; | |
155 } | |
156 } | |
157 | |
158 int GetMarksheetVersion( wxString file ) | |
159 { | |
160 wxImage img( file, wxBITMAP_TYPE_JPEG ); | |
161 int black = 0; | |
162 int x = 2465; | |
163 int h = 3500; | |
164 unsigned char r, g, b; | |
165 | |
166 for ( int y=0; y<h; y++ ) { | |
167 r = img.GetRed( x, y ); | |
168 g = img.GetGreen( x, y ); | |
169 b = img.GetBlue( x, y ); | |
170 if( IsBlack( (int)r, (int)g, (int)b ) ) black++; | |
171 } | |
172 float z = (float)black / h; | |
173 | |
174 if ( z > 0.120 ) { | |
175 return 2; // 0.130 - 0.140 | |
176 } | |
177 else { | |
178 return 1; // 0.099 - 0.110 | |
179 } | |
180 } | |
181 |