[Git][debian-gis-team/ossim][master] 5 commits: New upstream version 2.3.1

Bas Couwenberg gitlab at salsa.debian.org
Thu Apr 5 06:05:04 UTC 2018


Bas Couwenberg pushed to branch master at Debian GIS Project / ossim


Commits:
82efad2a by Bas Couwenberg at 2018-04-05T07:19:21+02:00
New upstream version 2.3.1
- - - - -
48c57aa8 by Bas Couwenberg at 2018-04-05T07:19:27+02:00
Merge tag 'upstream/2.3.1'

Upstream version 2.3.1

- - - - -
6c53d98b by Bas Couwenberg at 2018-04-05T07:19:55+02:00
New upstream release.

- - - - -
705da02e by Bas Couwenberg at 2018-04-05T07:21:51+02:00
Remove obsolete README.source.

- - - - -
ead46f86 by Bas Couwenberg at 2018-04-05T07:24:14+02:00
Set distribution to unstable.

- - - - -


13 changed files:

- apps/ossim-orthoigen/ossim-orthoigen.cpp
- − debian/README.source
- debian/changelog
- + include/ossim/imaging/ossimNitfCodecFactory.h
- include/ossim/init/JsonConfig.h
- include/ossim/point_cloud/ossimPointBlock.h
- include/ossim/util/ossimImageUtil.h
- share/ossim/templates/ossim_preferences_template
- src/imaging/ossimImageHandlerFactory.cpp
- + src/imaging/ossimNitfCodecFactory.cpp
- src/imaging/ossimScaleFilter.cpp
- src/util/ossimImageUtil.cpp
- test/src/ossim-foo.cpp


Changes:

=====================================
apps/ossim-orthoigen/ossim-orthoigen.cpp
=====================================
--- a/apps/ossim-orthoigen/ossim-orthoigen.cpp
+++ b/apps/ossim-orthoigen/ossim-orthoigen.cpp
@@ -1,6 +1,6 @@
 //*******************************************************************
 //
-// License:  LGPL
+// License:  MIT
 // 
 // See LICENSE.txt file in the top level directory for more details.
 //


=====================================
debian/README.source deleted
=====================================
--- a/debian/README.source
+++ /dev/null
@@ -1,10 +0,0 @@
-OSSIM for Debian
-----------------
-
-The ossim subdirectory in the upstream tarball doesn't contain the
-build system. This is included in the separate ossim_package_support
-subdirectory  which is excluded from the repacked upstream tarball.
-When the ossim package is updated to a new upstream release, the cmake
-patch needs to be updated to include the recent files from the
-CMakeModules directory.
-


=====================================
debian/changelog
=====================================
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,11 @@
-ossim (2.3.0-5) UNRELEASED; urgency=medium
+ossim (2.3.1-1) unstable; urgency=medium
 
+  * Team upload.
+  * New upstream release.
   * Update Vcs-* URLs for Salsa.
+  * Remove obsolete README.source.
 
- -- Bas Couwenberg <sebastic at debian.org>  Sat, 31 Mar 2018 12:39:53 +0200
+ -- Bas Couwenberg <sebastic at debian.org>  Thu, 05 Apr 2018 07:22:08 +0200
 
 ossim (2.3.0-4) unstable; urgency=medium
 


=====================================
include/ossim/imaging/ossimNitfCodecFactory.h
=====================================
--- /dev/null
+++ b/include/ossim/imaging/ossimNitfCodecFactory.h
@@ -0,0 +1,35 @@
+//----------------------------------------------------------------------------
+//
+// License:  MIT
+// 
+// See LICENSE.txt file in the top level directory for more details.
+//
+// Description: Factory class declaration for codec(encoder/decoder).
+// 
+//----------------------------------------------------------------------------
+// $Id$
+#ifndef ossimNitfCodecFactory_HEADER
+#define ossimNitfCodecFactory_HEADER
+#include <ossim/imaging/ossimCodecBase.h>
+#include <ossim/support_data/ossimNitfImageHeader.h>
+#include <mutex>
+
+/**
+* This is a convenience class that is used by the NITF handler to create the proper keywordlist
+* from the TREs and then calls the CodecRegistry to actuall return and allocate a new codec 
+*/
+class ossimNitfCodecFactory
+{
+public:
+   ~ossimNitfCodecFactory();
+   static ossimNitfCodecFactory* instance();
+
+   ossimCodecBase* createCodec(ossimRefPtr<ossimNitfImageHeader> imageHeader);
+protected:
+   static std::mutex m_mutex;
+   static ossimNitfCodecFactory* m_instance;
+   ossimNitfCodecFactory();
+};
+
+
+#endif


=====================================
include/ossim/init/JsonConfig.h
=====================================
--- a/include/ossim/init/JsonConfig.h
+++ b/include/ossim/init/JsonConfig.h
@@ -64,9 +64,9 @@ class JsonParam;
 class OSSIM_DLL JsonConfig : public ossim::JsonInterface
 {
 public:
+   /** Default Ctor loads all default .json files in the share/ossim system dir */
    JsonConfig();
 
-   /** Default Ctor loads all default .json files in the share/ossim system dir */
    JsonConfig(const ossimFilename& configFile);
 
    //! Destructor


=====================================
include/ossim/point_cloud/ossimPointBlock.h
=====================================
--- a/include/ossim/point_cloud/ossimPointBlock.h
+++ b/include/ossim/point_cloud/ossimPointBlock.h
@@ -80,7 +80,7 @@ public:
    virtual void initialize() {};
 
 protected:
-   ossimPointBlock(const ossimPointBlock& rhs) {}
+   ossimPointBlock(const ossimPointBlock& /* rhs */) {}
    void scanForMinMax() const;
 
    ossimPointRecord m_nullPCR;


=====================================
include/ossim/util/ossimImageUtil.h
=====================================
--- a/include/ossim/util/ossimImageUtil.h
+++ b/include/ossim/util/ossimImageUtil.h
@@ -33,6 +33,7 @@ class ossimFileWalker;
 class ossimGpt;
 class ossimPropertyInterface;
 class ossimApplicationUsage;
+class ossimImageHandler;
 /**
  * @brief ossimImageUtil class.
  *
@@ -107,11 +108,34 @@ public:
     * @note Number of required overviews is controlled by the ossim preferences
     * keyword overview_stop_dimension.
     */
-   void setCreateOverviewsFlag( bool flag );
+   void setCreateOverviewsFlag(bool flag);
 
    /** @return true if CREATE_OVERVIEWS_KW is found and set to true. */
    bool createOverviews() const;
-   
+
+   /**
+    * @brief Sets create thumbnails flag keyword CREATE_THUMBNAILS_KW used by
+    * processFile method.
+    *
+    * @param flag If true thumbnail will be created if image does not already.
+    *
+    * @note Overviews must be created before this works
+    */
+   void setCreateThumbnailsFlag(bool flag);
+
+   /**
+    *  @param value can be of values png or jpeg
+    */
+   void setThumbnailType(const std::string& value);
+
+   /**
+    * @param value can be of values none,auto-minmax,auto-percentile,std-stretch-1,std-stretch-2,std-stretch-3
+    */
+   void setThumbnailStretchType(const std::string& value);
+
+   /** @return true if CREATE_THUMBNAILS_KW is found and set to true. */
+   bool createThumbnails() const;
+
    /**
     * @brief Sets the rebuild overview flag keyword REBUILD_OVERVIEWS_KW used by
     * processFile method.
@@ -405,6 +429,8 @@ private:
                        bool useEntryIndex,
                        bool& consumedHistogramOptions);
 
+   void createThumbnail(ossimRefPtr<ossimImageHandler> &ih);
+
    /** @return true if entry has required overviews. */
    bool hasRequiredOverview( ossimRefPtr<ossimImageHandler>& ih,
                              ossimRefPtr<ossimOverviewBuilderBase>& ob );
@@ -452,15 +478,21 @@ private:
    /** @return the next writer prop index. */
    ossim_uint32 getNextWriterPropIndex() const;
 
-   /** @return the next reader prop index. */   
+   /** @return the next reader prop index. */
    ossim_uint32 getNextReaderPropIndex() const;
 
+   /** @return the next reader prop index. */
+   ossim_uint32 getThumbnailSize() const;
+
+   int getThumbnailStretchType()const;
+   std::string getThumbnailType()const;
+   std::string getThumbnailFilename(ossimImageHandler *ih) const;
    /**
     * @brief Adds option to m_kwl with mutex lock.
     * @param key
     * @param value
     */
-   void addOption( const std::string& key, ossim_uint32 value );
+   void addOption(const std::string &key, ossim_uint32 value);
    void addOption( const std::string& key, const std::string& value );
 
    /**


=====================================
share/ossim/templates/ossim_preferences_template
=====================================
--- a/share/ossim/templates/ossim_preferences_template
+++ b/share/ossim/templates/ossim_preferences_template
@@ -760,6 +760,11 @@ ossim.plugins.aws.s3.cacheInvalidLocations: true
 //ossim.stream.factory.registry.istream.buffer1.size: 65536
 
 
+// State cache settings
+// ossim.imaging.handler.registry.state_cache.enabled: true or false
+// ossim.imaging.handler.registry.state_cache.min_size: min number of items
+// ossim.imaging.handler.registry.state_cache.max_size: max number of items
+
 // Default the DES parser to true
 des_parser: true
 


=====================================
src/imaging/ossimImageHandlerFactory.cpp
=====================================
--- a/src/imaging/ossimImageHandlerFactory.cpp
+++ b/src/imaging/ossimImageHandlerFactory.cpp
@@ -417,10 +417,6 @@ ossimImageHandler* ossimImageHandlerFactory::open(const ossimKeywordlist& kwl,
       result = new ossimQbTileFilesHandler;
       if (result->loadState(kwl, prefix))  break;
 
-      if(traceDebug()) ossimNotify(ossimNotifyLevel_DEBUG)<<M<<"trying ossimQbTileFilesHandler...\n"<<std::endl;
-      result = new ossimQbTileFilesHandler;
-      if (result->loadState(kwl, prefix))  break;
-
       if (traceDebug()) ossimNotify(ossimNotifyLevel_DEBUG)<<M<< "Trying band-separated files...\n";
       result = new ossimBandSeparateHandler();
       if (result->loadState(kwl, prefix))  break;


=====================================
src/imaging/ossimNitfCodecFactory.cpp
=====================================
--- /dev/null
+++ b/src/imaging/ossimNitfCodecFactory.cpp
@@ -0,0 +1,57 @@
+//----------------------------------------------------------------------------
+//
+// License:  MIT
+// 
+// See LICENSE.txt file in the top level directory for more details.
+//
+// Description: Factory class declaration for codec(encoder/decoder).
+// 
+//----------------------------------------------------------------------------
+// $Id$
+#include <ossim/imaging/ossimNitfCodecFactory.h>
+#include <ossim/imaging/ossimCodecFactoryRegistry.h>
+ 
+ossimNitfCodecFactory* ossimNitfCodecFactory::m_instance=0;
+std::mutex ossimNitfCodecFactory::m_mutex;
+
+ossimNitfCodecFactory::ossimNitfCodecFactory()
+{
+   m_instance = this;
+}
+
+ossimNitfCodecFactory::~ossimNitfCodecFactory()
+{
+   std::lock_guard<std::mutex> lock(m_mutex);
+   m_instance = 0;
+}
+
+
+ossimNitfCodecFactory* ossimNitfCodecFactory::instance()
+{
+   std::lock_guard<std::mutex> lock(m_mutex);
+   if(!m_instance)
+   {
+      m_instance = new ossimNitfCodecFactory();
+   }
+
+   return m_instance;
+}
+
+ossimCodecBase* ossimNitfCodecFactory::createCodec(ossimRefPtr<ossimNitfImageHeader> imageHeader)
+{
+   ossimCodecBase* result=0;
+
+   if(imageHeader.valid()&&imageHeader->isCompressed())
+   {
+      ossimKeywordlist kwl;
+
+      imageHeader->saveState(kwl);
+      // rename the type to be a NITF IC compression type
+      // J2K should be C8
+      //
+      kwl.add("type", imageHeader->getCompressionCode().c_str(), true);
+      result = ossimCodecFactoryRegistry::instance()->createCodec(kwl);
+   }
+
+   return result;
+}


=====================================
src/imaging/ossimScaleFilter.cpp
=====================================
--- a/src/imaging/ossimScaleFilter.cpp
+++ b/src/imaging/ossimScaleFilter.cpp
@@ -251,10 +251,6 @@ ossimIrect ossimScaleFilter::getBoundingRect(ossim_uint32 resLevel)const
 
    if(!result.hasNans())
    {
-      result = ossimIrect(result.ul().x,
-                          result.ul().y,
-                          result.lr().x+1,
-                          result.lr().y+1);
       result *= m_ScaleFactor;
    }
    


=====================================
src/util/ossimImageUtil.cpp
=====================================
--- a/src/util/ossimImageUtil.cpp
+++ b/src/util/ossimImageUtil.cpp
@@ -52,6 +52,16 @@
 #include <ossim/projection/ossimProjectionFactoryRegistry.h>
 #include <ossim/support_data/ossimSupportFilesList.h>
 #include <ossim/util/ossimFileWalker.h>
+#include <ossim/imaging/ossimBandSelector.h>
+#include <ossim/imaging/ossimImageHistogramSource.h>
+#include <ossim/imaging/ossimImageSourceFactoryRegistry.h>
+#include <ossim/imaging/ossimImageRenderer.h>
+#include <ossim/imaging/ossimScaleFilter.h>
+#include <ossim/imaging/ossimImageWriterFactoryRegistry.h>
+#include <ossim/imaging/ossimHistogramRemapper.h>
+#include <ossim/imaging/ossimScalarRemapper.h>
+#include <ossim/imaging/ossimRectangleCutFilter.h>
+#include <ossim/projection/ossimImageViewAffineTransform.h>
 
 #include <cstdlib>
 #include <iomanip>
@@ -66,6 +76,7 @@ static std::string CREATE_HISTOGRAM_KW         = "create_histogram";
 static std::string CREATE_HISTOGRAM_FAST_KW    = "create_histogram_fast";
 static std::string CREATE_HISTOGRAM_R0_KW      = "create_histogram_r0";
 static std::string CREATE_OVERVIEWS_KW         = "create_overviews";
+static std::string CREATE_THUMBNAILS_KW        = "create_thumbnails";
 static std::string DUMP_FILTERED_IMAGES_KW     = "dump_filter_image";
 static std::string FALSE_KW                    = "false";
 static std::string FILE_KW                     = "file";
@@ -81,6 +92,9 @@ static std::string REBUILD_OVERVIEWS_KW        = "rebuild_overviews";
 static std::string SCAN_MIN_MAX_KW             = "scan_for_min_max";
 static std::string SCAN_MIN_MAX_NULL_KW        = "scan_for_min_max_null";
 static std::string THREADS_KW                  = "threads";
+static std::string THUMBNAIL_SIZE_KW           = "thumbnail_size";
+static std::string THUMBNAIL_STRETCH_TYPE_KW   = "thumbnail_stretch_type";
+static std::string THUMBNAIL_TYPE_KW           = "thumbnail_type";
 static std::string TILE_SIZE_KW                = "tile_size";
 static std::string TRUE_KW                     = "true";
 static std::string WRITER_PROP_KW              = "writer_prop";
@@ -115,9 +129,12 @@ void ossimImageUtil::addOptions(ossimApplicationUsage* au)
    au->addCommandLineOption("-a or --include-fullres", "Copy full res dataset to overview file as well as building reduced res sets. Option only valid with tiff overview builder. Requires -o option.");
  
    au->addCommandLineOption("--ch or --create-histogram", "Computes full histogram alongside overview.");
- 
+
    au->addCommandLineOption("--chf or --create-histogram-fast", "Computes a histogram in fast mode which samples partial tiles.");
- 
+   au->addCommandLineOption("--ct or --create-thumbnail", "computes a thumbnail of the image");
+   au->addCommandLineOption("--tt or --thumbnail-type", "Can be of of values png or jpeg");
+   au->addCommandLineOption("--tst or --thumbnail-stretch-type", "Can be of values none,auto-minmax,auto-percentile,std-stretch-1,std-stretch-2,std-stretch-3");
+
    au->addCommandLineOption("--compression-quality", "Compression quality for TIFF JPEG takes values from 0 to 100, where 100 is best.  For J2K plugin, numerically_lossless, visually_lossless, lossy");
  
    au->addCommandLineOption("--compute-min-max", "Turns on min, max scanning when reading tiles and writes a dot omd file. This option assumes the null is known.");
@@ -261,7 +278,7 @@ bool ossimImageUtil::initialize(ossimArgumentParser& ap)
                break;
             }
          }
- 
+
          if( ap.read("--compute-min-max") )
          {
             setScanForMinMax( true );
@@ -371,17 +388,41 @@ bool ossimImageUtil::initialize(ossimArgumentParser& ap)
                break;
             }
          }
- 
-         if( ap.read("-o") )
+
+         if (ap.read("-o"))
          {
-            setCreateOverviewsFlag( true );
-            if ( ap.argc() < 2 )
+            setCreateOverviewsFlag(true);
+            if (ap.argc() < 2)
             {
                break;
             }
-         }        
- 
-         if( ap.read("--ot", sp1) )
+         }
+         if (ap.read("--ct"))
+         {
+            setCreateThumbnailsFlag(true);
+            if (ap.argc() < 2)
+            {
+               break;
+            }
+         }
+         if (ap.read("--tt", sp1) || ap.read("--thumbnail-type", sp1))
+         {
+            setThumbnailType(ts1);
+            if (ap.argc() < 2)
+            {
+               break;
+            }
+         }
+         if (ap.read("--tst", sp1) || ap.read("--thumbnail-stretch-type", sp1))
+         {
+            setThumbnailStretchType(ts1);
+            if (ap.argc() < 2)
+            {
+               break;
+            }
+         }
+
+         if (ap.read("--ot", sp1))
          {
             setOverviewType( ts1 );
             if ( ap.argc() < 2 )
@@ -712,7 +753,19 @@ void ossimImageUtil::processFile(const ossimFilename& file)
                createOverview(ih, consumedHistogramOptions, consumedCmmOptions);
             }
          }
- 
+         if(createThumbnails())
+         {
+            for(ossim_uint32 idx = 0; idx < ih->getNumberOfEntries();++idx)
+            {
+               ih->setCurrentEntry(idx);
+               if(ih->getNumberOfDecimationLevels() <=1)
+               {
+                  ih->getState()->setOverviewState(0);
+                  ih->openOverview();
+               }
+            }
+            createThumbnail(ih);
+         }
          // Build stand alone histogram.  Note the overview sequencer may have computed for us.
          if ( hasHistogramOption() && !consumedHistogramOptions)
          {
@@ -952,7 +1005,103 @@ void ossimImageUtil::createOverview(ossimRefPtr<ossimImageHandler>& ih,
       ossimNotify(ossimNotifyLevel_DEBUG) << M << " exited...\n";
    }
 }
- 
+void ossimImageUtil::createThumbnail(ossimRefPtr<ossimImageHandler> &ih)
+{
+   ossimKeywordlist bandsKeywordList;
+   bandsKeywordList.add("type", "ossimBandSelector");
+   bandsKeywordList.add(ossimKeywordNames::BANDS_KW, "default");
+   ossimRefPtr<ossimImageSource> bs = ossimImageSourceFactoryRegistry::instance()->createImageSource(bandsKeywordList);
+   if (!bs)
+      return;
+   ossimIrect cutRect;
+   ossimRefPtr<ossimImageRenderer> renderer = new ossimImageRenderer();
+   ossimRefPtr<ossimScalarRemapper> scalarRemapper = new ossimScalarRemapper();
+   ossimRefPtr<ossimRectangleCutFilter> cutFilter = new ossimRectangleCutFilter();
+   ossimRefPtr<ossimImageViewAffineTransform> trans = new ossimImageViewAffineTransform();
+   ossimDrect bounds = ih->getBoundingRect();
+   ossim_float64 maxSize = ossim::max(bounds.width(), bounds.height());
+   ossim_float64 thumbnailSize = getThumbnailSize();
+   ossim_float64 scale = thumbnailSize / maxSize;
+   ossimFilename thumbnailFilename = getThumbnailFilename(ih.get());
+   ossimHistogramRemapper::StretchMode thumbnailStretchType = static_cast<ossimHistogramRemapper::StretchMode> (getThumbnailStretchType());
+   if (scale > 1.0)
+   {
+      scale = 1.0;
+      cutRect = bounds;
+   }
+   else
+   {
+      cutRect = bounds * scale;
+   }
+   cutFilter->setRectangle(cutRect);
+   if ((scale < .5) && (ih->getNumberOfDecimationLevels() < 2))
+   {
+      return;
+   }
+
+   trans->scale(scale, scale);
+   renderer->setImageViewTransform(trans.get());
+   if (!bs.valid())
+      return;
+   bs->connectMyInputTo(ih.get());
+   bs->initialize();
+   ossim_uint32 bandCount = bs->getNumberOfInputBands();
+   if ((bandCount == 2) || (bandCount > 3))
+   {
+      ossimBandSelector *tempBs = dynamic_cast<ossimBandSelector *>(bs.get());
+      if (tempBs)
+      {
+         tempBs->setThreeBandRgb();
+      }
+   }
+
+   ossimRefPtr<ossimHistogramRemapper> stretch = new ossimHistogramRemapper();
+   stretch->setStretchMode(thumbnailStretchType);
+   ossimFilename histogramFilename = ih->createDefaultHistogramFilename();
+
+   //if (!histogramFilename.empty())
+   //{
+   //   histogramFile = m_histogramFilename;
+   // }
+   stretch->connectMyInputTo(bs.get());
+   stretch->openHistogram(histogramFilename);
+   renderer->connectMyInputTo(stretch.get());
+
+   scalarRemapper->connectMyInputTo(renderer.get());
+   cutFilter->connectMyInputTo(scalarRemapper.get());
+   ossimKeywordlist writerKwl;
+   ossimString ext = thumbnailFilename.ext();
+   ext = ext.downcase();
+   writerKwl.add("type", "image/" + ext);
+   writerKwl.add("filename", thumbnailFilename.c_str());
+   writerKwl.add("create_external_geometry", "false");
+   if (ext == "png")
+   {
+      writerKwl.add("add_alpha_channel", "true");
+   }
+   ossimRefPtr<ossimImageFileWriter> writer = ossimImageWriterFactoryRegistry::instance()->createWriter(writerKwl);
+
+   if (writer)
+   {
+      writer->connectMyInputTo(cutFilter.get());
+
+      writer->execute();
+
+      writer->disconnect();
+      writer = 0;
+   }
+   scalarRemapper->disconnect();
+   scalarRemapper = 0;
+   cutFilter->disconnect();
+   cutFilter = 0;
+   renderer->disconnect();
+   renderer = 0;
+   stretch->disconnect();
+   stretch = 0;
+   bs->disconnect();
+   bs = 0;
+}
+
 bool ossimImageUtil::hasRequiredOverview( ossimRefPtr<ossimImageHandler>& ih,
                                           ossimRefPtr<ossimOverviewBuilderBase>& ob )
 {
@@ -1512,6 +1661,15 @@ bool ossimImageUtil::createOverviews() const
 {
    return  keyIsTrue( CREATE_OVERVIEWS_KW );
 }
+void ossimImageUtil::setCreateThumbnailsFlag(bool flag)
+{
+   addOption(CREATE_THUMBNAILS_KW, (flag ? TRUE_KW : FALSE_KW));
+}
+
+bool ossimImageUtil::createThumbnails() const
+{
+   return keyIsTrue(CREATE_THUMBNAILS_KW);
+}
 
 void ossimImageUtil::setRebuildOverviewsFlag( bool flag )
 {
@@ -1924,10 +2082,106 @@ ossim_uint32 ossimImageUtil::getNextReaderPropIndex() const
    }
    return result;
 }
+ossim_uint32 ossimImageUtil::getThumbnailSize() const
+{
+   ossim_uint32 result;
+   std::string lookup = m_kwl->findKey(THUMBNAIL_SIZE_KW);
+   if (lookup.size())
+   {
+      result = ossimString(lookup).toUInt32();
+   }
+   else
+   {
+      result = 256;
+   }
+   return result;
+}
+void ossimImageUtil::setThumbnailStretchType(const std::string &value)
+{
+   addOption(THUMBNAIL_STRETCH_TYPE_KW, value);
+}
+
+int ossimImageUtil::getThumbnailStretchType()const
+{
+   int result = ossimHistogramRemapper::LINEAR_AUTO_MIN_MAX;
+   
+   ossimString typeString = m_kwl->findKey(THUMBNAIL_STRETCH_TYPE_KW);
+
+   if (typeString.empty())
+   {
+      typeString = "auto-minmax";
+   }
+
+   typeString = typeString.downcase();
+
+   if ((typeString == "auto-minmax"))
+   {
+      result = ossimHistogramRemapper::StretchMode::LINEAR_AUTO_MIN_MAX;
+   }
+   else if ((typeString == "auto-percentile"))
+   {
+      result = ossimHistogramRemapper::StretchMode::LINEAR_AUTO_PERCENTILE;
+   }
+   else if ((typeString == "std-stretch-1") || (typeString == "std-stretch 1"))
+   {
+      result = ossimHistogramRemapper::StretchMode::LINEAR_1STD_FROM_MEAN;
+   }
+   else if ((typeString == "std-stretch-2") || (typeString == "std-stretch 2"))
+   {
+      result = ossimHistogramRemapper::StretchMode::LINEAR_2STD_FROM_MEAN;
+   }
+   else if ((typeString == "std-stretch-3") || (typeString == "std-stretch 3"))
+   {
+      result = ossimHistogramRemapper::StretchMode::LINEAR_3STD_FROM_MEAN;
+   }
+   else if (typeString == "auto-minmax")
+   {
+      result = ossimHistogramRemapper::StretchMode::STRETCH_UNKNOWN;
+   }
+   return result;
+}
+
+void ossimImageUtil::setThumbnailType(const std::string& value)
+{
+   addOption(THUMBNAIL_TYPE_KW, value);
+}
+
+std::string ossimImageUtil::getThumbnailType() const
+{
+   ossimString typeString = m_kwl->findKey(THUMBNAIL_TYPE_KW);
+   std::string result = "jpeg";
+
+   typeString = typeString.downcase();
+
+   if(typeString != "png" && typeString != "jpeg")
+   {
+      typeString = "jpeg";
+   }
+
+   result = typeString.string();
+
+   return result;
+}
+
+std::string ossimImageUtil::getThumbnailFilename(ossimImageHandler* ih) const
+{
+   ossimFilename thumbnailFilename = ih->getFilenameWithThisExtension("");
+   std::string thumbnailType = getThumbnailType();
+   if (thumbnailType == "png")
+   {
+      thumbnailFilename = ossimFilename(thumbnailFilename + "thumb.png");
+   }
+   else
+   {
+      thumbnailFilename = ossimFilename(thumbnailFilename + "thumb.jpg");
+   }
+
+   return thumbnailFilename.string();
+}
 
-void ossimImageUtil::addOption( const std::string& key, ossim_uint32 value )
+void ossimImageUtil::addOption(const std::string &key, ossim_uint32 value)
 {
-   addOption( key, ossimString::toString( value ).string() );
+   addOption(key, ossimString::toString(value).string());
 }
 
 void ossimImageUtil::addOption(  const std::string& key, const std::string& value )


=====================================
test/src/ossim-foo.cpp
=====================================
--- a/test/src/ossim-foo.cpp
+++ b/test/src/ossim-foo.cpp
@@ -86,6 +86,7 @@
 #include <ossim/projection/ossimUtmProjection.h>
 
 #include <ossim/support_data/ossimSrcRecord.h>
+#include <ossim/support_data/ossimNitfFile.h>
 #include <ossim/support_data/ossimWkt.h>
 
 #include <ossim/base/Barrier.h>
@@ -93,10 +94,12 @@
 #include <ossim/base/Thread.h>
 #include <ossim/support_data/TiffHandlerState.h>
 #include <ossim/support_data/ImageHandlerStateRegistry.h>
+#include <ossim/imaging/ossimNitfCodecFactory.h>
+#include <ossim/projection/ossimNitfRpcModel.h>
+#include <ossim/projection/ossimQuickbirdRpcModel.h>
+#include <ossim/imaging/ossimNitfCodecFactory.h>
 
 // Put your includes here:
-#include<ossim/projection/ossimNitfRpcModel.h>
-#include<ossim/projection/ossimQuickbirdRpcModel.h>
 
 int main(int argc, char *argv[])
 {
@@ -110,54 +113,24 @@ int main(int argc, char *argv[])
 
    try
    {
-      ossimImageHandlerRegistry* handlerReg = ossimImageHandlerRegistry::instance();
-      ossimProjectionFactoryRegistry* projReg = ossimProjectionFactoryRegistry::instance();
+      ossimRefPtr<ossimNitfFile> file = new ossimNitfFile();
 
-      // Open the image and fetch the geometry via the plugin:
-      ossimRefPtr<ossimImageHandler> pluginHandler = handlerReg->open(fname, true, false);
-      ossimRefPtr<ossimImageGeometry> pluginGeom = pluginHandler->getImageGeometry();
-      cout<<"pluginGeom's projection: "<<pluginGeom->getProjection()->getClassName()<<endl;
 
-      // NITF:
-      ossimRefPtr<ossimNitfRpcModel> nitfProj = new ossimNitfRpcModel(fname);
-      ossimRefPtr<ossimImageGeometry> nitfGeom = new ossimImageGeometry(0, nitfProj.get());
-      cout<<"NITF projection: "<<nitfProj->getClassName()<<endl;
-
-      // QB:
-      ossimRefPtr<ossimQuickbirdRpcModel> dgqbProj = new ossimQuickbirdRpcModel();
-      dgqbProj->parseFile(fname);
-      ossimRefPtr<ossimImageGeometry> dgqbGeom = new ossimImageGeometry(0, dgqbProj.get());
-      cout<<"DG/QB projection: "<<dgqbProj->getClassName()<<endl;
-
-      // Establish even image point distribution:
-      ossimIrect imageRect;
-      pluginGeom->getBoundingRect(imageRect);
-      int dx = (imageRect.width()-1)/2;
-      int dy = (imageRect.height()-1)/2;
-      ossimGpt pluginGpt, nitfGpt, dgqbGpt;
-      ossimDpt ip0;
-      double nitfDist, dgqbDist;
-
-      // Compute residual error between models:
-      for (int Y=0; Y<3; Y++)
+      if(file->parseFile(ossimFilename(argv[1])))
       {
-         ip0.y = dy*Y;
-         for (int X=0; X<3; X++)
+         ossimRefPtr<ossimNitfImageHeader> imageHeader = file->getNewImageHeader(0);
+      
+         if(imageHeader.valid())
          {
-            ip0.x = dx*X;
-            pluginGeom->localToWorld(ip0, 0, pluginGpt);
-
-            nitfGeom->localToWorld(ip0, 0, nitfGpt);
-            nitfDist = pluginGpt.distanceTo(nitfGpt);
-
-            dgqbGeom->localToWorld(ip0, 0, dgqbGpt);
-            dgqbDist = pluginGpt.distanceTo(dgqbGpt);
-
-            cout  <<"\nGround residuals for image point "<<ip0<<":"
-                  <<"\n  NITF: "<<nitfDist<<" m"
-                  <<"\n  DGQB: "<<dgqbDist<<" m"<<endl;
+            ossimRefPtr<ossimCodecBase> codec = ossimNitfCodecFactory::instance()->createCodec(imageHeader);
+            if(codec.valid())
+            {
+               std::cout << "WE WERE ABLE TO ALLOCATE A CODEC!!!!!!\n";
+            }
          }
       }
+
+
    }
    catch(const ossimException& e)
    {



View it on GitLab: https://salsa.debian.org/debian-gis-team/ossim/compare/b53ebe0acdc3067e3f6da95b4532b4a2cb3e2654...ead46f864addf5d613d11823c8136c34004150c9

---
View it on GitLab: https://salsa.debian.org/debian-gis-team/ossim/compare/b53ebe0acdc3067e3f6da95b4532b4a2cb3e2654...ead46f864addf5d613d11823c8136c34004150c9
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/pkg-grass-devel/attachments/20180405/49212953/attachment-0001.html>


More information about the Pkg-grass-devel mailing list