svn-gvsig-desktop / trunk / libraries / libjni-mrsid-macosx / include / base / lti_scene.h @ 9099
History | View | Annotate | Download (13.4 KB)
1 |
/* $Id: lti_scene.h 9099 2006-11-29 12:16:22Z mija $ */
|
---|---|
2 |
/* //////////////////////////////////////////////////////////////////////////
|
3 |
// //
|
4 |
// This code is Copyright (c) 2004 LizardTech, Inc, 1008 Western Avenue, //
|
5 |
// Suite 200, Seattle, WA 98104. Unauthorized use or distribution //
|
6 |
// prohibited. Access to and use of this code is permitted only under //
|
7 |
// license from LizardTech, Inc. Portions of the code are protected by //
|
8 |
// US and foreign patents and other filings. All Rights Reserved. //
|
9 |
// //
|
10 |
////////////////////////////////////////////////////////////////////////// */
|
11 |
/* PUBLIC */
|
12 |
|
13 |
#ifndef LTI_SCENE_H
|
14 |
#define LTI_SCENE_H
|
15 |
|
16 |
// lt_lib_base
|
17 |
#include "lt_base.h" |
18 |
|
19 |
|
20 |
#if defined(LT_COMPILER_MS)
|
21 |
#pragma warning(push,4) |
22 |
#endif
|
23 |
|
24 |
LT_BEGIN_NAMESPACE(LizardTech) |
25 |
|
26 |
|
27 |
/**
|
28 |
* representation of a scene
|
29 |
*
|
30 |
* This class represents a scene within an image. A scene contains these
|
31 |
* values:
|
32 |
* \li an upper-left (x,y) position
|
33 |
* \li a width and a height
|
34 |
* \li a magnification
|
35 |
*
|
36 |
* The (X,Y) point is expressed in pixel-space (mag=1.0) coordinates, relative
|
37 |
* to the given magnification. The width and height are absolutes, i.e. they
|
38 |
* correspond to the buffer size the user expects.
|
39 |
*
|
40 |
* The scene position and dimensions are maintained as high-precision values.
|
41 |
* Accessors are supplied to get the high-precision values as well as the
|
42 |
* properly rounded integral values (expressed in row/col form).
|
43 |
*
|
44 |
* A mag value of 1.0 indicates full-size resolution. A mag greater than 1.0
|
45 |
* indicates res-up (zoom in) by a factor of two: 2.0 gives an image 2x bigger,
|
46 |
* 4.0 gives an image 4x bigger, etc. A mag value less than 1.0 indicates
|
47 |
* a lower resolution: 0.5 gives a half-sized image, 0.25 gives a quarter-sized
|
48 |
* image, etc.
|
49 |
*
|
50 |
* An LTIImageReader may not support the requested magnification: most readers
|
51 |
* only support mag=1.0, and MrSID readers only support power-of-two magnifications (0.25,
|
52 |
* 0.5, 1.0, 2.0, 4.0, etc). If the mag request cannot be returned the extraction
|
53 |
* will return an error.
|
54 |
*
|
55 |
* An LTIScene is used to express the region of an image to be decoded via a
|
56 |
* call to LTIImageReader::decodeBegin(), etc.
|
57 |
*
|
58 |
* As an example, consider an image which is 512x512 pixels. Then, the
|
59 |
* following scenes from the image will all contain the same upper-left point
|
60 |
* and all will be 100x100 pixels. The "granularity" (resolution) of each
|
61 |
* pixel, however, will differ.
|
62 |
* \li <tt>const LTIScene scene(256, 256, 100, 100, 1.0); // center point</tt>
|
63 |
* \li <tt>const LTIScene scene(512, 512, 100, 100, 2.0);</tt>
|
64 |
* \li <tt>const LTIScene scene(128, 128, 100, 100, 0.5);</tt>
|
65 |
*
|
66 |
* @note Scenes may not require a buffer larger than 2GB.
|
67 |
*/
|
68 |
class LTIScene |
69 |
{ |
70 |
public:
|
71 |
/**
|
72 |
* constructor
|
73 |
*
|
74 |
* This constructor produces a scene set to the given parameters, using double-precision.
|
75 |
*
|
76 |
* @param ulX upper left X position of scene
|
77 |
* @param ulY upper left Y position of scene
|
78 |
* @param width width of scene
|
79 |
* @param height height of scene
|
80 |
* @param magnification resolution of scene
|
81 |
*/
|
82 |
LTIScene(double ulX, double ulY, |
83 |
double width, double height, |
84 |
double magnification);
|
85 |
|
86 |
/**
|
87 |
* copy constructor
|
88 |
*/
|
89 |
LTIScene(const LTIScene& copy);
|
90 |
|
91 |
/**
|
92 |
* default constructor
|
93 |
*
|
94 |
* This constructor will produce a scene with "invalid" default
|
95 |
* coordinates.
|
96 |
*/
|
97 |
LTIScene(void);
|
98 |
|
99 |
/**
|
100 |
* assignment operator
|
101 |
*/
|
102 |
LTIScene& operator=(const LTIScene&);
|
103 |
|
104 |
/**
|
105 |
* equality operator
|
106 |
*/
|
107 |
bool operator==(const LTIScene&) const; |
108 |
|
109 |
/**
|
110 |
* equality operator
|
111 |
*/
|
112 |
bool operator!=(const LTIScene&) const; |
113 |
|
114 |
|
115 |
/**
|
116 |
* returns the magnification of the scene
|
117 |
*
|
118 |
* Returns the magnification of the scene.
|
119 |
*
|
120 |
* @return the magnification
|
121 |
*/
|
122 |
double getMag() const; |
123 |
|
124 |
|
125 |
/**
|
126 |
* @name High-precision point functions
|
127 |
*/
|
128 |
/*@{*/
|
129 |
|
130 |
/**
|
131 |
* returns the x-position of the upper-left point
|
132 |
*
|
133 |
* Returns the x-position of the upper-left point. This is a high-precision value.
|
134 |
*
|
135 |
* @return the x-position of the point
|
136 |
*/
|
137 |
double getUpperLeftX() const; |
138 |
|
139 |
/**
|
140 |
* returns the y-position of the upper-left point
|
141 |
*
|
142 |
* Returns the y-position of the upper-left point. This is a high-precision value.
|
143 |
*
|
144 |
* @return the y-position of the point
|
145 |
*/
|
146 |
double getUpperLeftY() const; |
147 |
|
148 |
/**
|
149 |
* returns the x-position of the lower-right point
|
150 |
*
|
151 |
* Returns the x-position of the lower-right point. This is a high-precision value.
|
152 |
*
|
153 |
* @return the x-position of the point
|
154 |
*/
|
155 |
double getLowerRightX() const; |
156 |
|
157 |
/**
|
158 |
* returns the y-position of the lower-right point
|
159 |
*
|
160 |
* Returns the y-position of the lower-right point. This is a high-precision value.
|
161 |
*
|
162 |
* @return the y-position of the point
|
163 |
*/
|
164 |
double getLowerRightY() const; |
165 |
|
166 |
/**
|
167 |
* returns the x-position of the upper-right point
|
168 |
*
|
169 |
* Returns the x-position of the upper-right point. This is a high-precision value.
|
170 |
*
|
171 |
* @return the x-position of the point
|
172 |
*/
|
173 |
double getUpperRightX() const; |
174 |
|
175 |
/**
|
176 |
* returns the y-position of the upper-left point
|
177 |
*
|
178 |
* Returns the y-position of the upper-left point. This is a high-precision value.
|
179 |
*
|
180 |
* @return the y-position of the point
|
181 |
*/
|
182 |
double getUpperRightY() const; |
183 |
|
184 |
/**
|
185 |
* returns the x-position of the lower-left point
|
186 |
*
|
187 |
* Returns the x-position of the lower-left point. This is a high-precision value.
|
188 |
*
|
189 |
* @return the x-position of the point
|
190 |
*/
|
191 |
double getLowerLeftX() const; |
192 |
|
193 |
/**
|
194 |
* returns the y-position of the lower-left point
|
195 |
*
|
196 |
* Returns the y-position of the lower-left point. This is a high-precision value.
|
197 |
*
|
198 |
* @return the y-position of the point
|
199 |
*/
|
200 |
double getLowerLeftY() const; |
201 |
|
202 |
/**
|
203 |
* returns the x-position of the center point
|
204 |
*
|
205 |
* Returns the x-position of the center point. This is a high-precision value.
|
206 |
*
|
207 |
* @return the x-position of the point
|
208 |
*/
|
209 |
double getCenterX() const; |
210 |
|
211 |
/**
|
212 |
* returns the x-position of the center point
|
213 |
*
|
214 |
* Returns the x-position of the center point. This is a high-precision value.
|
215 |
*
|
216 |
* @return the x-position of the point
|
217 |
*/
|
218 |
double getCenterY() const; |
219 |
|
220 |
/*@}*/
|
221 |
|
222 |
|
223 |
/**
|
224 |
* @name Low-precision point functions
|
225 |
*
|
226 |
* These functions return properly rounded integral values, to be used
|
227 |
* only when discretizing the pixels (for example to map to a buffer in
|
228 |
* memory).
|
229 |
*/
|
230 |
/*@{*/
|
231 |
|
232 |
/**
|
233 |
* returns the x-position of the upper-left point
|
234 |
*
|
235 |
* Returns the x-position of the upper-left point. This is a low-precision value.
|
236 |
*
|
237 |
* @return the x-position of the point
|
238 |
*/
|
239 |
lt_int32 getUpperLeftCol() const;
|
240 |
|
241 |
/**
|
242 |
* returns the y-position of the upper-left point
|
243 |
*
|
244 |
* Returns the y-position of the upper-left point. This is a low-precision value.
|
245 |
*
|
246 |
* @return the y-position of the point
|
247 |
*/
|
248 |
lt_int32 getUpperLeftRow() const;
|
249 |
|
250 |
/**
|
251 |
* returns the x-position of the lower-right point
|
252 |
*
|
253 |
* Returns the x-position of the lower-right point. This is a low-precision value.
|
254 |
*
|
255 |
* @return the x-position of the point
|
256 |
*/
|
257 |
lt_int32 getLowerRightCol() const;
|
258 |
|
259 |
/**
|
260 |
* returns the y-position of the lower-right point
|
261 |
*
|
262 |
* Returns the y-position of the lower-right point. This is a low-precision value.
|
263 |
*
|
264 |
* @return the y-position of the point
|
265 |
*/
|
266 |
lt_int32 getLowerRightRow() const;
|
267 |
|
268 |
/**
|
269 |
* returns the x-position of the upper-right point
|
270 |
*
|
271 |
* Returns the x-position of the upper-right point. This is a low-precision value.
|
272 |
*
|
273 |
* @return the x-position of the point
|
274 |
*/
|
275 |
lt_int32 getUpperRightCol() const;
|
276 |
|
277 |
/**
|
278 |
* returns the y-position of the upper-right point
|
279 |
*
|
280 |
* Returns the y-position of the upper-right point. This is a low-precision value.
|
281 |
*
|
282 |
* @return the y-position of the point
|
283 |
*/
|
284 |
lt_int32 getUpperRightRow() const;
|
285 |
|
286 |
/**
|
287 |
* returns the x-position of the lower-left point
|
288 |
*
|
289 |
* Returns the x-position of the lower-left point. This is a low-precision value.
|
290 |
*
|
291 |
* @return the x-position of the point
|
292 |
*/
|
293 |
lt_int32 getLowerLeftCol() const;
|
294 |
|
295 |
/**
|
296 |
* returns the y-position of the lower-left point
|
297 |
*
|
298 |
* Returns the y-position of the lower-left point. This is a low-precision value.
|
299 |
*
|
300 |
* @return the y-position of the point
|
301 |
*/
|
302 |
lt_int32 getLowerLeftRow() const;
|
303 |
|
304 |
/**
|
305 |
* returns the x-position of the center point
|
306 |
*
|
307 |
* Returns the x-position of the center point. This is a low-precision value.
|
308 |
*
|
309 |
* @return the x-position of the point
|
310 |
*/
|
311 |
lt_int32 getCenterCol() const;
|
312 |
|
313 |
/**
|
314 |
* returns the y-position of the center point
|
315 |
*
|
316 |
* Returns the y-position of the center point. This is a low-precision value.
|
317 |
*
|
318 |
* @return the y-position of the point
|
319 |
*/
|
320 |
lt_int32 getCenterRow() const;
|
321 |
|
322 |
/*@}*/
|
323 |
|
324 |
|
325 |
/**
|
326 |
* @name Dimension functions
|
327 |
*
|
328 |
*/
|
329 |
/*@{*/
|
330 |
|
331 |
/**
|
332 |
* returns the width of the scene
|
333 |
*
|
334 |
* Returns the width of the scene. This is a high-precision value.
|
335 |
*
|
336 |
* @return the width
|
337 |
*/
|
338 |
double getWidth() const; |
339 |
|
340 |
/**
|
341 |
* returns the height of the scene
|
342 |
*
|
343 |
* Returns the height of the scene. This is a high-precision value.
|
344 |
*
|
345 |
* @return the height
|
346 |
*/
|
347 |
double getHeight() const; |
348 |
|
349 |
/**
|
350 |
* returns the width of the scene
|
351 |
*
|
352 |
* Returns the width of the scene. This is a low-precision value.
|
353 |
*
|
354 |
* @return the width
|
355 |
*/
|
356 |
lt_int32 getNumCols() const;
|
357 |
|
358 |
/**
|
359 |
* returns the height of the scene
|
360 |
*
|
361 |
* Returns the height of the scene. This is a low-precision value.
|
362 |
*
|
363 |
* @return the height
|
364 |
*/
|
365 |
lt_int32 getNumRows() const;
|
366 |
|
367 |
/*@}*/
|
368 |
|
369 |
|
370 |
/**
|
371 |
* @name Helper functions
|
372 |
*
|
373 |
*/
|
374 |
/*@{*/
|
375 |
|
376 |
/**
|
377 |
* returns the x-position of the upper-left point
|
378 |
*
|
379 |
* Returns the x-position of the upper-left point, as a high-precision
|
380 |
* value. This returns the same value as calling getUpperLeftX().
|
381 |
*
|
382 |
* @return the x-position of the point
|
383 |
*/
|
384 |
double getX() const; |
385 |
|
386 |
/**
|
387 |
* returns the y-position of the upper-left point
|
388 |
*
|
389 |
* Returns the y-position of the upper-left point, as a high-precision
|
390 |
* value. This returns the same value as calling getUpperLeftY().
|
391 |
*
|
392 |
* @return the y-position of the point
|
393 |
*/
|
394 |
double getY() const; |
395 |
|
396 |
/**
|
397 |
* returns the (x,y) positions of the upper-left and lower-right points
|
398 |
*
|
399 |
* Returns the (x,y) positions of the upper-left and lower-right points,
|
400 |
* as high-precision values.
|
401 |
*
|
402 |
* @param ulX the upper-left x-position
|
403 |
* @param ulY the upper-left y-position
|
404 |
* @param lrX the lower-right x-position
|
405 |
* @param lrY the lower-right y-position
|
406 |
*/
|
407 |
void getPoints(double& ulX, double& ulY, |
408 |
double& lrX, double& lrY) const; |
409 |
|
410 |
/**
|
411 |
* returns the (x,y) positions of the center and corner points
|
412 |
*
|
413 |
* Returns the (x,y) positions of the center and corner points,
|
414 |
* as high-precision values.
|
415 |
*
|
416 |
* @param ulX the upper-left x-position
|
417 |
* @param ulY the upper-left y-position
|
418 |
* @param urX the upper-right x-position
|
419 |
* @param urY the upper-right y-position
|
420 |
* @param llX the lower-left x-position
|
421 |
* @param llY the lower-left y-position
|
422 |
* @param lrX the lower-right x-position
|
423 |
* @param lrY the lower-right y-position
|
424 |
* @param cX the center x-position
|
425 |
* @param cY the center y-position
|
426 |
*/
|
427 |
void getPoints(double& ulX, double& ulY, |
428 |
double& urX, double& urY, |
429 |
double& llX, double& llY, |
430 |
double& lrX, double& lrY, |
431 |
double& cX, double& cY) const; |
432 |
|
433 |
/**
|
434 |
* returns the (x,y) positions of the upper-left and lower-right points
|
435 |
*
|
436 |
* Returns the (x,y) positions of the upper-left and lower-right points,
|
437 |
* as low-precision values.
|
438 |
*
|
439 |
* @param ulX the upper-left x-position
|
440 |
* @param ulY the upper-left y-position
|
441 |
* @param lrX the lower-right x-position
|
442 |
* @param lrY the lower-right y-position
|
443 |
*/
|
444 |
void getPoints(lt_int32& ulX, lt_int32& ulY,
|
445 |
lt_int32& lrX, lt_int32& lrY) const;
|
446 |
|
447 |
/**
|
448 |
* returns the (x,y) positions of the center and corner points
|
449 |
*
|
450 |
* Returns the (x,y) positions of the center and corner points,
|
451 |
* as low-precision values.
|
452 |
*
|
453 |
* @param ulX the upper-left x-position
|
454 |
* @param ulY the upper-left y-position
|
455 |
* @param urX the upper-right x-position
|
456 |
* @param urY the upper-right y-position
|
457 |
* @param llX the lower-left x-position
|
458 |
* @param llY the lower-left y-position
|
459 |
* @param lrX the lower-right x-position
|
460 |
* @param lrY the lower-right y-position
|
461 |
* @param cX the center x-position
|
462 |
* @param cY the center y-position
|
463 |
*/
|
464 |
void getPoints(lt_int32& ulX, lt_int32& ulY,
|
465 |
lt_int32& urX, lt_int32& urY, |
466 |
lt_int32& llX, lt_int32& llY, |
467 |
lt_int32& lrX, lt_int32& lrY, |
468 |
lt_int32& cX, lt_int32& cY) const;
|
469 |
/*@}*/
|
470 |
|
471 |
protected:
|
472 |
double m_ulX, m_ulY;
|
473 |
double m_width, m_height;
|
474 |
double m_magnification;
|
475 |
|
476 |
private:
|
477 |
lt_int32 getHalfWidth_i() const;
|
478 |
lt_int32 getHalfHeight_i() const;
|
479 |
}; |
480 |
|
481 |
|
482 |
LT_END_NAMESPACE(LizardTech) |
483 |
|
484 |
#if defined(LT_COMPILER_MS)
|
485 |
#pragma warning(pop)
|
486 |
#endif
|
487 |
|
488 |
#endif // LTI_SCENE_H |