OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimImageWriterFactory.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 // Copyright (C) 2000 ImageLinks Inc.
3 //
4 // License: MIT
5 //
6 // See LICENSE.txt file in the top level directory for more details.
7 //
8 // Author: Garrett Potts
9 //
10 //*******************************************************************
11 // $Id$
12 
24 
26 
27 
29 {
30  if(!theInstance)
31  {
34  }
35 
36  return theInstance;
37 }
38 
40 {
42 }
43 
45  const ossimString& fileExtension)const
46 {
47  ossimImageFileWriter* result = 0;
48 
49  ossimString ext = fileExtension;
50  ext.downcase();
51 
52  if( (ext == "tif")|| (ext == "tiff") )
53  {
54  result = new ossimTiffWriter;
55  }
56  else if( (ext == "jpg")|| (ext == "jpeg") )
57  {
58  result = new ossimJpegWriter;
59  }
60  else if( (ext == "ras") || (ext == "bsq") )
61  {
62  // Default is OSSIM_GENERAL_RASTER_BSQ
63  result = new ossimGeneralRasterWriter;
64  }
65  else if(ext == "bil")
66  {
67  result = new ossimGeneralRasterWriter;
69  }
70  else if(ext == "bip")
71  {
72  result = new ossimGeneralRasterWriter;
74  }
75  else if((ext == "ntf")||
76  (ext == "nitf"))
77  {
78  result = new ossimNitfWriter;
79  }
80  else if( ext == "pdf" )
81  {
82  result = new ossimPdfWriter;
83  }
84 
85  return result;
86 }
87 
90  const char *prefix)const
91 {
92  ossimString type = kwl.find(prefix, ossimKeywordNames::TYPE_KW);
94 
95  if(type != "")
96  {
97  result = createWriter(type);
98  if (result)
99  {
100  if (result->hasImageType(type))
101  {
102  ossimKeywordlist kwl2(kwl);
103  kwl2.add(prefix,
105  type,
106  true);
107 
108  result->loadState(kwl2, prefix);
109  }
110  else
111  {
112  result->loadState(kwl, prefix);
113  }
114  }
115  }
116 
117  return result;
118 }
119 
122 {
123  ossimString mimeType = typeName;
124  mimeType = mimeType.downcase();
125 
126  // Check for tiff writer.
128 
129  if(writer.valid())
130  {
131  return writer.release();
132  }
133 
134  // Check for generic ossim writer.
135  writer = new ossimWriter;
136  if ( writer->getClassName() == typeName )
137  {
138  return writer.release();
139  }
140  else
141  {
142  // See if the type name is supported by the writer.
143  if ( writer->hasImageType(typeName) )
144  {
145  writer->setOutputImageType(typeName);
146  return writer.release();
147  }
148  }
149 
150  writer = new ossimTiffWriter;
151  if (STATIC_TYPE_NAME(ossimTiffWriter) == typeName )
152  {
153  return writer.release();
154  }
155  else
156  {
157  // See if the type name is supported by the writer.
158  if ( writer->hasImageType(typeName) )
159  {
160  writer->setOutputImageType(typeName);
161  return writer.release();
162  }
163  }
164 
165  // Check for jpeg writer.
166  writer = new ossimJpegWriter;
167  if ( writer->getClassName() == typeName )
168  {
169  return writer.release();
170  }
171  else
172  {
173  // See if the type name is supported by the writer.
174  if ( writer->hasImageType(typeName) )
175  {
176  writer->setOutputImageType(typeName);
177  return writer.release();
178  }
179  }
180 
181  // Check for general raster writer.
182  writer = new ossimGeneralRasterWriter;
183  if ( writer->getClassName() == typeName )
184  {
185  return writer.release();
186  }
187  else
188  {
189  // See if the type name is supported by the writer.
190  if ( writer->hasImageType(typeName) )
191  {
192  writer->setOutputImageType(typeName);
193  return writer.release();
194  }
195  }
196 
197  // Check for nitf writer.
198  writer = new ossimNitfWriter;
199  if ( writer->getClassName() == typeName )
200  {
201  return writer.release();
202  }
203  else
204  {
205  // See if the type name is supported by the writer.
206  if ( writer->hasImageType(typeName) )
207  {
208  writer->setOutputImageType(typeName);
209  return writer.release();
210  }
211  }
212 
213  // Check for nitf writer.
214  writer = new ossimNitf20Writer;
215  if ( writer->getClassName() == typeName )
216  {
217  return writer.release();
218  }
219  else
220  {
221  // See if the type name is supported by the writer.
222  if ( writer->hasImageType(typeName) )
223  {
224  writer->setOutputImageType(typeName);
225  return writer.release();
226  }
227  }
228 
229  // Check for pdf writer.
230  writer = new ossimPdfWriter;
231  if ( writer->getClassName() == typeName )
232  {
233  return writer.release();
234  }
235  else
236  {
237  // See if the type name is supported by the writer.
238  if ( writer->hasImageType(typeName) )
239  {
240  writer->setOutputImageType(typeName);
241  return writer.release();
242  }
243  }
244 
245  writer = 0; // Not a nitf writer.
246 
247  return writer.release(); // Return a null writer.
248 }
249 
251  const ossimString& mimeType)const
252 {
253  if((mimeType == "image/jpeg")||
254  (mimeType == "image/jpg"))
255  {
256  ossimJpegWriter* writer = new ossimJpegWriter;
257  writer->setOutputImageType("jpeg");
258  return writer;
259  }
260  else if((mimeType == "image/tiff")||
261  (mimeType == "image/tif")||
262  (mimeType == "image/gtif")||
263  (mimeType == "image/gtiff"))
264  {
265  ossimTiffWriter* writer = new ossimTiffWriter;
266  writer->setOutputImageType("tiff_tiled_band_separate");
267  return writer;
268  }
269  else if((mimeType == "image/nitf") ||
270  (mimeType == "image/ntf"))
271  {
272  ossimNitfWriter* writer = new ossimNitfWriter;
273  writer->setOutputImageType("nitf_block_band_separate");
274  return writer;
275  }
276  else if((mimeType == "image/ras"))
277  {
279  writer->setOutputImageType("general_raster_bsq");
280  return writer;
281  }
282  else if((mimeType == "application/pdf")||
283  (mimeType == "image/pdf"))
284  {
285  ossimPdfWriter* writer = new ossimPdfWriter;
286  writer->setOutputImageType("ossim_pdf");
287  return writer;
288  }
289  return 0;
290 }
291 
293  const char *prefix)const
294 {
295  return createWriter(kwl, prefix);
296 }
297 
299 {
300  return createWriter(typeName);
301 }
302 
303 void ossimImageWriterFactory::getExtensions(std::vector<ossimString>& result)const
304 {
305  result.push_back("ras");
306  result.push_back("bsq");
307  result.push_back("bil");
308  result.push_back("bip");
309  result.push_back("tif");
310  result.push_back("jpg");
311  result.push_back("ntf");
312  result.push_back("pdf");
313 }
314 
315 void ossimImageWriterFactory::getTypeNameList(std::vector<ossimString>& typeList)const
316 {
317  typeList.push_back(STATIC_TYPE_NAME(ossimTiffWriter));
318  typeList.push_back(STATIC_TYPE_NAME(ossimJpegWriter));
319  typeList.push_back(STATIC_TYPE_NAME(ossimGeneralRasterWriter));
320  typeList.push_back(STATIC_TYPE_NAME(ossimNitfWriter));
321  typeList.push_back(STATIC_TYPE_NAME(ossimNitf20Writer));
322  typeList.push_back(STATIC_TYPE_NAME(ossimPdfWriter));
323  typeList.push_back(ossimString("ossimWriter"));
324 }
325 
328 {
329  ossimString testExt = ext.downcase();
330  if(testExt == "tiff" || testExt == "tif")
331  {
332  result.push_back(new ossimTiffWriter);
333  }
334  else if(testExt == "ntf" || testExt == "nitf")
335  {
336  result.push_back(new ossimNitfWriter);
337  }
338  else if(testExt == "jpg" || testExt == "jpeg")
339  {
340  result.push_back(new ossimJpegWriter);
341  }
342  else if(testExt == "ras" || testExt == "bsq" || testExt == "bil" || testExt == "bip")
343  {
344  result.push_back(new ossimGeneralRasterWriter);
345  }
346  else if( testExt == "pdf" )
347  {
348  result.push_back( new ossimPdfWriter );
349  }
350 }
351 
353  ossimImageWriterFactoryBase::ImageFileWriterList& result, const ossimString& mimeType ) const
354 {
355  ossimString testExt = mimeType.downcase();
356  testExt = ossimString(testExt.begin()+6, testExt.end());
357 
358  getImageFileWritersBySuffix(result, testExt);
359 }
360 
361 void ossimImageWriterFactory::getImageTypeList( std::vector<ossimString>& imageTypeList ) const
362 {
363  // Add the tiff writer types.
365  writer->getImageTypeList(imageTypeList);
366 
367  // Add the jpeg writer types.
368  writer = new ossimJpegWriter;
369  writer->getImageTypeList(imageTypeList);
370 
371  // Add the general raster writer types.
372  writer = new ossimGeneralRasterWriter;
373  writer->getImageTypeList(imageTypeList);
374 
375  // Add the nitf writer types.
376  writer = new ossimNitfWriter;
377  writer->getImageTypeList(imageTypeList);
378 
379  // Add the nitf writer types.
380  writer = new ossimNitf20Writer;
381  writer->getImageTypeList(imageTypeList);
382 
383  // Add the pdf writer types.
384  writer = new ossimPdfWriter;
385  writer->getImageTypeList(imageTypeList);
386 
387  // Add the generic ossim writer types.
388  writer = new ossimWriter;
389  writer->getImageTypeList(imageTypeList);
390 
391  writer = 0;
392 }
ossimWriter - Generic image writer.
Definition: ossimWriter.h:28
virtual void setOutputImageType(ossim_int32 type)
static ossimImageWriterFactory * instance()
virtual ossimObject * createObject(const ossimKeywordlist &kwl, const char *prefix=0) const
Represents serializable keyword/value map.
bool valid() const
Definition: ossimRefPtr.h:75
const char * find(const char *key) const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
static ossimImageWriterFactoryRegistry * instance()
virtual void getTypeNameList(std::vector< ossimString > &typeList) const
virtual ossimString getClassName() const
Definition: ossimObject.cpp:64
Pure virtual base class for image file writers.
References:
static const char * TYPE_KW
std::string::iterator end()
Definition: ossimString.h:423
#define STATIC_TYPE_NAME(T)
Definition: ossimRtti.h:325
virtual void getImageTypeList(std::vector< ossimString > &imageTypeList) const =0
void getImageTypeList(std::vector<ossimString>& imageTypeList)const
void push_back(char c)
Equivalent to insert(end(), c).
Definition: ossimString.h:905
virtual void getImageFileWritersBySuffix(ossimImageWriterFactoryBase::ImageFileWriterList &result, const ossimString &ext) const
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
std::string::iterator begin()
Definition: ossimString.h:420
T * release()
Definition: ossimRefPtr.h:93
static ossimString downcase(const ossimString &aString)
Definition: ossimString.cpp:48
void registerFactory(T *factory, bool pushToFrontFlag=false)
Will register a factory to the factory list.
virtual bool hasImageType(const ossimString &imageType) const
bool hasImageType(const ossimString& imageType) const
virtual void getImageFileWritersByMimeType(ossimImageWriterFactoryBase::ImageFileWriterList &result, const ossimString &mimeType) const
std::vector< ossimRefPtr< ossimImageFileWriter > > ImageFileWriterList
static ossimImageWriterFactory * theInstance
ossimImageFileWriter * createWriterFromExtension(const ossimString &fileExtension) const
ossimImageFileWriter * createFromMimeType(const ossimString &mimeType) const
virtual void getImageTypeList(std::vector< ossimString > &imageTypeList) const
virtual ossimImageFileWriter * createWriter(const ossimKeywordlist &kwl, const char *prefix=0) const
static const char * IMAGE_TYPE_KW
virtual void getExtensions(std::vector< ossimString > &result) const