svn-gvsig-desktop / tags / v1_9_Build_1232 / libraries / libjni-mrsid-macosx / include / mrsid_readers / MG3CompositeImageReader.h @ 28800
History | View | Annotate | Download (8.86 KB)
1 | 9099 | mija | /* $Id$ */
|
---|---|---|---|
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 MG3COMPOSITEIMAGEREADER_H
|
||
14 | #define MG3COMPOSITEIMAGEREADER_H
|
||
15 | |||
16 | // lt_lib_mrsid_mrsidReaders
|
||
17 | #include "MrSIDImageReaderBase.h" |
||
18 | |||
19 | |||
20 | LT_BEGIN_NAMESPACE(LizardTech) |
||
21 | |||
22 | #if defined(LT_COMPILER_MS)
|
||
23 | #pragma warning(push,4) |
||
24 | #endif
|
||
25 | |||
26 | class MG3Container; |
||
27 | class LTIMosaicFilter; |
||
28 | class MG3SingleImageReader; |
||
29 | class MG2ImageReader; |
||
30 | class J2KImageReader; |
||
31 | |||
32 | /**
|
||
33 | * reader for MrSID/MG3 images
|
||
34 | *
|
||
35 | * This class supports reading MrSID/MG3 images.
|
||
36 | *
|
||
37 | * @note MrSID/MG2 images are not supported with this class.
|
||
38 | */
|
||
39 | class MG3CompositeImageReader : public MrSIDImageReaderBase |
||
40 | { |
||
41 | public:
|
||
42 | /**
|
||
43 | * constructor
|
||
44 | *
|
||
45 | * Create an MG3 reader from the given file.
|
||
46 | *
|
||
47 | * The \a imageNumber array allows for control over
|
||
48 | * which tiles in the image should be opened to form
|
||
49 | * the composite (mosaic) image. If NULL is passed,
|
||
50 | * all tiles will be used.
|
||
51 | *
|
||
52 | * To determine the tiles available in the image,
|
||
53 | * you can use the static getCompositeImageInfo()
|
||
54 | * member function.
|
||
55 | *
|
||
56 | * @param fileSpec file containing MrSID image
|
||
57 | * @param imageNumber array of image tile numbers
|
||
58 | * @param numImages size of \a imageNumber array
|
||
59 | * @param useWorldFile incorporate world file data when reading image
|
||
60 | * @param memoryUsage control memory resource usage
|
||
61 | * @param streamUsage control stream resource usage
|
||
62 | */
|
||
63 | MG3CompositeImageReader(const LTFileSpec& fileSpec,
|
||
64 | const lt_uint32* imageNumber,
|
||
65 | lt_uint32 numImages, |
||
66 | bool useWorldFile,
|
||
67 | MrSIDMemoryUsage memoryUsage, |
||
68 | MrSIDStreamUsage streamUsage); |
||
69 | |||
70 | /**
|
||
71 | * constructor
|
||
72 | *
|
||
73 | * Construct an MG3 image from a stream. (See file-based
|
||
74 | * constructor for details.)
|
||
75 | *
|
||
76 | * @param stream stream containing MrSID image (may not be NULL)
|
||
77 | * @param imageNumber array of image tile numbers
|
||
78 | * @param numImages size of \a imageNumber array
|
||
79 | * @param worldFileStream stream containing world file data (may be NULL)
|
||
80 | * @param memoryUsage control memory resource usage
|
||
81 | * @param streamUsage control stream resource usage
|
||
82 | */
|
||
83 | MG3CompositeImageReader(LTIOStreamInf* stream, |
||
84 | const lt_uint32* imageNumber,
|
||
85 | lt_uint32 numImages, |
||
86 | LTIOStreamInf* worldFileStream, |
||
87 | MrSIDMemoryUsage memoryUsage, |
||
88 | MrSIDStreamUsage streamUsage); |
||
89 | |||
90 | MG3CompositeImageReader(MG3Container* container, |
||
91 | const lt_uint32* imageNumber,
|
||
92 | lt_uint32 numImages, |
||
93 | LTIOStreamInf* worldFileStream, |
||
94 | MrSIDMemoryUsage memoryUsage, |
||
95 | MrSIDStreamUsage streamUsage); |
||
96 | |||
97 | virtual ~MG3CompositeImageReader(); |
||
98 | LT_STATUS initialize(); |
||
99 | |||
100 | LT_STATUS setStripHeight(lt_uint32 stripHeight); |
||
101 | lt_uint32 getStripHeight() const;
|
||
102 | |||
103 | lt_uint8 getNumLevels() const;
|
||
104 | bool isLocked() const; |
||
105 | |||
106 | void getVersion(lt_uint8& major, lt_uint8& minor, lt_uint8& tweak, char& letter) const; |
||
107 | |||
108 | /**
|
||
109 | * query if is optimizable
|
||
110 | *
|
||
111 | * Returns true if and only if the image can be further compressed.
|
||
112 | *
|
||
113 | * @return true, if and only if the image may be compressed
|
||
114 | */
|
||
115 | bool isOptimizable() const; |
||
116 | |||
117 | /**
|
||
118 | * tile type queries
|
||
119 | *
|
||
120 | * These functions are used to determine whether any of the tiles
|
||
121 | * in the image are MG2 or JPEG 2000.
|
||
122 | */
|
||
123 | /*@{*/
|
||
124 | bool hasMG2Data() const; |
||
125 | bool hasJP2Data() const; |
||
126 | /*@}*/
|
||
127 | |||
128 | void setInterruptDelegate(LTIInterruptDelegate* delegate);
|
||
129 | |||
130 | lt_int64 getPhysicalFileSize() const;
|
||
131 | |||
132 | /**
|
||
133 | * file format type of image tile
|
||
134 | */
|
||
135 | enum CompositeImageType
|
||
136 | { |
||
137 | COMPOSITETYPE_MG2 = 1,
|
||
138 | COMPOSITETYPE_MG3 = 2,
|
||
139 | COMPOSITETYPE_JP2 = 3
|
||
140 | }; |
||
141 | |||
142 | /**
|
||
143 | * structure representing tiled image
|
||
144 | */
|
||
145 | struct CompositeImageInfo
|
||
146 | { |
||
147 | /** image tile number */
|
||
148 | lt_uint32 imageId; |
||
149 | |||
150 | /** x-position of tile in the mosaic */
|
||
151 | double xPos;
|
||
152 | |||
153 | /** y-position of tile in the mosaic */
|
||
154 | double yPos;
|
||
155 | |||
156 | /** type of image tile */
|
||
157 | CompositeImageType imageType; |
||
158 | }; |
||
159 | |||
160 | /**
|
||
161 | * query tile information
|
||
162 | *
|
||
163 | * This function is used to collect information about the tiles in the
|
||
164 | * image.
|
||
165 | *
|
||
166 | * The caller takes ownership of the returned \a tileInfo array.
|
||
167 | *
|
||
168 | * @param tileInfo array of tile information structures to be set
|
||
169 | * @param numTiles number of tiles
|
||
170 | * @return status code indicating success or failure
|
||
171 | */
|
||
172 | LT_STATUS getTileInfo(CompositeImageInfo *&tileInfo, lt_uint32 &numTiles) const;
|
||
173 | |||
174 | /**
|
||
175 | * query tile information
|
||
176 | *
|
||
177 | * This function is used to collect information about the tiles in
|
||
178 | * the image contained in the given file.
|
||
179 | *
|
||
180 | * The caller takes ownership of the returned \a info array.
|
||
181 | *
|
||
182 | * @param fileSpec name of image to query
|
||
183 | * @param tileInfo array of tile information structures to be set
|
||
184 | * @param numTiles number of tiles
|
||
185 | * @return status code indicating success or failure
|
||
186 | */
|
||
187 | static LT_STATUS getCompositeImageInfo(const LTFileSpec &fileSpec, |
||
188 | CompositeImageInfo *&tileInfo, |
||
189 | lt_uint32 &numTiles); |
||
190 | |||
191 | /**
|
||
192 | * query tile information
|
||
193 | *
|
||
194 | * This function is used to collect information about the tiles in
|
||
195 | * the image contained in the given stream.
|
||
196 | *
|
||
197 | * The caller takes ownership of the returned \a info array.
|
||
198 | *
|
||
199 | * @param stream stream containing image to query
|
||
200 | * @param tileInfo array of tile information structures to be set
|
||
201 | * @param numTiles number of tiles
|
||
202 | * @return status code indicating success or failure
|
||
203 | */
|
||
204 | static LT_STATUS getCompositeImageInfo(LTIOStreamInf &stream,
|
||
205 | CompositeImageInfo *&tileInfo, |
||
206 | lt_uint32 &numTiles); |
||
207 | |||
208 | static LT_STATUS getCompositeImageInfo(const MG3Container &container, |
||
209 | CompositeImageInfo *&tileInfo, |
||
210 | lt_uint32 &numTiles); |
||
211 | |||
212 | |||
213 | //protected: // only used be MG3Optimizer
|
||
214 | bool getReaderScene(lt_uint32 imageIndex,
|
||
215 | const LTIScene &scene,
|
||
216 | LTIScene &readerScene) const;
|
||
217 | |||
218 | protected:
|
||
219 | LT_STATUS decodeBegin(const LTIScene& scene);
|
||
220 | LT_STATUS decodeStrip(LTISceneBuffer& stripBuffer, |
||
221 | const LTIScene& stripScene);
|
||
222 | LT_STATUS decodeEnd(); |
||
223 | |||
224 | LT_STATUS init(void);
|
||
225 | |||
226 | virtual LT_STATUS createMG2Reader(lt_uint32 imageNumber, |
||
227 | MG2ImageReader *&mg2Reader); |
||
228 | virtual LT_STATUS createMG3Reader(lt_uint32 imageNumber, |
||
229 | MG3SingleImageReader *&mg3Reader); |
||
230 | virtual LT_STATUS createJP2Reader(lt_uint32 imageNumber, |
||
231 | J2KImageReader *&jp2Reader); |
||
232 | |||
233 | virtual LT_STATUS updateMemoryModel(); |
||
234 | |||
235 | #ifndef DOXYGEN_EXCLUDE
|
||
236 | struct Data
|
||
237 | { |
||
238 | ~Data(void);
|
||
239 | Data(const LTFileSpec *fileSpec,
|
||
240 | LTIOStreamInf *stream, |
||
241 | MG3Container* container, |
||
242 | lt_uint32 numImages, |
||
243 | const lt_uint32* imageNumbers,
|
||
244 | LTIOStreamInf* worldFileStream); |
||
245 | |||
246 | MG3Container* m_container; |
||
247 | bool m_ownContainer;
|
||
248 | |||
249 | lt_uint32 m_numImages; |
||
250 | lt_uint32* m_imageNumbers; |
||
251 | LTIImageReader** m_readers; |
||
252 | LTIImageStage** m_images; |
||
253 | CompositeImageType *m_tileType; |
||
254 | LTIMosaicFilter* m_mosaic; |
||
255 | |||
256 | LTFileSpec* m_fileSpec; |
||
257 | LTIOStreamInf* m_stream; |
||
258 | bool m_ownStream;
|
||
259 | LTIOStreamInf* m_worldFileStream; |
||
260 | |||
261 | bool m_isLockedComposite;
|
||
262 | lt_uint8 m_numLevelsComposite; |
||
263 | bool m_isOptimizableComposite;
|
||
264 | bool m_hasMG2Composite;
|
||
265 | bool m_hasJP2Composite;
|
||
266 | }; |
||
267 | #endif
|
||
268 | Data *m_dat; |
||
269 | |||
270 | private:
|
||
271 | typedef MrSIDImageReaderBase Super;
|
||
272 | |||
273 | // nope
|
||
274 | MG3CompositeImageReader(const MG3CompositeImageReader&);
|
||
275 | MG3CompositeImageReader& operator=(const MG3CompositeImageReader&);
|
||
276 | }; |
||
277 | |||
278 | |||
279 | LT_END_NAMESPACE(LizardTech) |
||
280 | |||
281 | #if defined(LT_COMPILER_MS)
|
||
282 | #pragma warning(pop)
|
||
283 | #endif
|
||
284 | |||
285 | #endif // MG3COMPOSITEIMAGEREADER_H |