forked from mayfourth/javaocr
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathImage.java
More file actions
199 lines (173 loc) · 4.73 KB
/
Copy pathImage.java
File metadata and controls
199 lines (173 loc) · 4.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/*
* Copyright (c) 2003-2012, Ronald B. Cemer , Konstantin Pribluda, William Whitney, Andrea De Pasquale
*
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sourceforge.javaocr;
/**
* Image functionality. Images are opaque objects and hide implementation details
* (especially storage layout or actual pixel representation). Images provide way to iterate
* over it (thus, they are statefull and NOT thread safe), and retrieve and set current pixel.
* Convenience methods to set given pixels are provided, but iterating methods shall be used for
* high performance bulk operations
*
* @author Konstantin Pribluda
*/
public interface Image {
/**
* retrieve value of pixel in image specific fashion
*
* @param x
* @param y
* @return
*/
int get(int x, int y);
/**
* store pixel at specified position
*
* @param x
* @param y
* @param value
*/
void put(int x, int y, int value);
/**
* retrieve pixekl at current position, does not modify current image pointer
*
* @return
*/
int get();
/**
* store pixel at current position, does not modify current image pointer
*
* @param value
*/
void put(int value);
/**
* whether horizontal line is empty between specified coordinates
* in image specific fashion
*
* @param y Y value
* @param from inclusive from
* @param to inclusive to
* @param value
* @return whether line is empty in image specific fashion
* @deprecated use iterator instead
*/
boolean horizontalSpanEquals(final int y, final int from, final int to, final int value);
/**
* whether vertical line is empty between specified points
*
* @param x X Value
* @param from inclusive from
* @param to inclusive to
* @param value
* @return whether line is empty in image specific fashion
* @deprecated use iterators instead
*/
boolean verticalSpanEquals(final int x, final int from, final int to, final int value);
/**
* @return image width
*/
int getWidth();
/**
* @return image height
*/
int getHeight();
/**
* @return origin inside bigger image. 0 if this is not subimage
*/
public int getOriginX();
public int getOriginY();
/**
* convenience method to initialize iterator over whole image row
*/
void iterateH(int y);
/**
* initialize iterator over part of row
*
* @param from from position
* @param to to position
*/
void iterateH(int y, int from, int to);
/**
* convenience method to initialize iterator over whole image column
*/
void iterateV(int x);
/**
* initialize iterator over part of column
*
* @param from
* @param to
*/
void iterateV(int x, int from, int to);
/**
* advance and retrieve next available pixel
*
* @return
*/
int next();
/**
* store and advance to next pixel
*/
void next(int pixel);
/**
* whether next pixel is available
*
* @return
*/
boolean hasNext();
/**
* copy image content to another image
*
* @param dst destination image
*/
void copy(Image dst);
/**
* copy image swithcing axes in process
*
* @param dst destination image
*/
void flip(Image dst);
/**
* chisel out sub-image out of original one. be careful with dimensions -
* no internal checks are done. Operation works in place and no data is copied.
*
* @param fromX subimage origin X
* @param fromY subimage origin Y
* @param width subimage width
* @param height subimage height
* @return image region as image
*/
Image chisel(int fromX, int fromY, int width, int height);
/**
* full row out of image
* @param y coordinate
* @return row image
*/
Image row(int y);
/**
* full column out of image
* @param x coordinate
* @return column image
*/
Image column(int x);
/**
* aspect ration of this image
* TODO: do we actually need this?
*
* @return
*/
float getAspectRatio();
}