OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimGdalImageWriterFactory.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 // Copyright (C) 2000 ImageLinks Inc.
3 //
4 // License: LGPL
5 //
6 // See LICENSE.txt file in the top level directory for more details.
7 //
8 // Author: Garrett Potts
9 //
10 //*******************************************************************
11 // $Id: ossimGdalImageWriterFactory.cpp 19908 2011-08-05 19:57:34Z dburken $
12 
14 #include "ossimGdalWriter.h"
16 
18 
19 
21 {
22  if(!theInstance)
23  {
25  }
26 
27  return theInstance;
28 }
29 
31 {
33 }
34 
37  const char *prefix)const
38 {
39  ossimString type = kwl.find(prefix, ossimKeywordNames::TYPE_KW);
41  if(type != "")
42  {
43  result = createWriter(type);
44  if (result)
45  {
46  if (result->hasImageType(type))
47  {
48  ossimKeywordlist kwl2(kwl);
49  kwl2.add(prefix,
51  type,
52  true);
53 
54  result->loadState(kwl2, prefix);
55  }
56  else
57  {
58  result->loadState(kwl, prefix);
59  }
60  }
61  }
62 
63  return result;
64 }
65 
67 {
69  if (writer->getClassName() == typeName)
70  {
71  return writer.release();
72  }
73 
74  if (writer->hasImageType(typeName))
75  {
76  writer->setOutputImageType(typeName);
77  return writer.release();
78  }
79 
80  writer = 0;
81 
82  return writer.release();
83 }
84 
86  const char *prefix)const
87 {
88  return createWriter(kwl, prefix);
89 }
90 
92 {
93  return createWriter(typeName);
94 }
95 
96 
97 void ossimGdalImageWriterFactory::getExtensions(std::vector<ossimString>& result)const
98 {
99  result.push_back("img");
100  result.push_back("jp2");
101  result.push_back("png");
102 }
103 
104 void ossimGdalImageWriterFactory::getTypeNameList(std::vector<ossimString>& typeList)const
105 {
106  getImageTypeList(typeList);
107 }
108 
109 void ossimGdalImageWriterFactory::getImageTypeList(std::vector<ossimString>& imageTypeList)const
110 {
111  ossimGdalWriter* writer = new ossimGdalWriter;
112  writer->getImageTypeList(imageTypeList);
113  delete writer;
114 }
115 
117  const ossimString& ext)const
118 {
119  int c = GDALGetDriverCount();
120  int idx = 0;
121  for(idx = 0; idx < c; ++idx)
122  {
123 
124  GDALDriverH h = GDALGetDriver(idx);
125  if(canWrite(h))
126  {
127  ossimString driverName = GDALGetDriverShortName(h);
128  driverName = "gdal_" + driverName.upcase();
129  ossimString metaData(GDALGetMetadataItem(h, GDAL_DMD_EXTENSION, 0));
130  if(!metaData.empty())
131  {
132  std::vector<ossimString> splitArray;
133  metaData.split(splitArray, " /");
134 
135  ossim_uint32 idxExtension = 0;
136 
137  for(idxExtension = 0; idxExtension < splitArray.size(); ++idxExtension)
138  {
139  if(ext == splitArray[idxExtension])
140  {
141  ossimGdalWriter* writer = new ossimGdalWriter;
142  writer->setOutputImageType(driverName);
143  result.push_back(writer);
144  if ( driverName == "gdal_JP2KAK" )
145  {
146  // Make it lossless for starters. User can still override.
147  ossimKeywordlist kwl;
148  kwl.add("property0.name", "QUALITY");
149  kwl.add("property0.value", "100");
150  writer->loadState(kwl, NULL);
151  }
152  return;
153  }
154  }
155  }
156  }
157  }
158 }
159 
161  const ossimString& mimeType)const
162 {
163  int c = GDALGetDriverCount();
164  int idx = 0;
165  for(idx = 0; idx < c; ++idx)
166  {
167 
168  GDALDriverH h = GDALGetDriver(idx);
169  if(canWrite(h))
170  {
171  ossimString driverName = GDALGetDriverShortName(h);
172  driverName = "gdal_" + driverName.upcase();
173  ossimString metaData(GDALGetMetadataItem(h, GDAL_DMD_MIMETYPE, 0));
174  if(!metaData.empty())
175  {
176  if(metaData == mimeType)
177  {
178  ossimGdalWriter* writer = new ossimGdalWriter;
179  writer->setOutputImageType(driverName);
180  result.push_back(writer);
181  if ( driverName == "gdal_JP2KAK" )
182  {
183  // Make it lossless for starters. User can still override.
184  ossimKeywordlist kwl;
185  kwl.add("property0.name", "QUALITY");
186  kwl.add("property0.value", "100");
187  writer->loadState(kwl, NULL);
188  }
189  return;
190  }
191  }
192  }
193  }
194 }
195 
196 bool ossimGdalImageWriterFactory::canWrite(GDALDatasetH handle)const
197 {
198  return ( GDALGetMetadataItem(handle, GDAL_DCAP_CREATE, 0)|| GDALGetMetadataItem(handle, GDAL_DCAP_CREATECOPY, 0));
199 }
200 
virtual void getImageFileWritersByMimeType(ossimImageWriterFactoryBase::ImageFileWriterList &result, const ossimString &mimeType) const
static ossimString upcase(const ossimString &aString)
Definition: ossimString.cpp:34
Represents serializable keyword/value map.
const char * find(const char *key) const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
virtual void setOutputImageType(const ossimString &type)
void split(std::vector< ossimString > &result, const ossimString &separatorList, bool skipBlankFields=false) const
Splits this string into a vector of strings (fields) using the delimiter list specified.
virtual void getExtensions(std::vector< ossimString > &result) const
virtual ossimString getClassName() const
Definition: ossimObject.cpp:64
Pure virtual base class for image file writers.
static const char * TYPE_KW
static ossimGdalImageWriterFactory * theInstance
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual bool hasImageType(const ossimString &imageType) const
bool hasImageType(const ossimString& imageType) const
virtual void getImageTypeList(std::vector< ossimString > &imageTypeList) const
void getImageTypeList(std::vector<ossimString>& imageTypeList)const
unsigned int ossim_uint32
virtual void getTypeNameList(std::vector< ossimString > &typeList) const
T * release()
Definition: ossimRefPtr.h:93
virtual bool hasImageType(const ossimString &imageType) const
bool hasImageType(const ossimString& imageType) const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
std::vector< ossimRefPtr< ossimImageFileWriter > > ImageFileWriterList
virtual void getImageFileWritersBySuffix(ossimImageWriterFactoryBase::ImageFileWriterList &result, const ossimString &ext) const
virtual void getImageTypeList(std::vector< ossimString > &imageTypeList) const
void getImageTypeList(std::vector<ossimString>& imageTypeList)const
static ossimGdalImageWriterFactory * instance()
bool empty() const
Definition: ossimString.h:411
virtual ossimImageFileWriter * createWriter(const ossimKeywordlist &kwl, const char *prefix=0) const
static const char * IMAGE_TYPE_KW
virtual ossimObject * createObject(const ossimKeywordlist &kwl, const char *prefix=0) const
bool canWrite(GDALDatasetH handle) const