/* -*-c++-*- */ /* osgEarth - Geospatial SDK for OpenSceneGraph * Copyright 2020 Pelican Mapping * http://osgearth.org * * osgEarth is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see */ #ifndef OSGEARTH_IMAGE_TO_HEIGHTFIELD_CONVERTER #define OSGEARTH_IMAGE_TO_HEIGHTFIELD_CONVERTER 1 #include #include #include namespace osgEarth { namespace Util { /** * Utility class that re-interprets an image as a heightfield and vice-versa. */ class OSGEARTH_EXPORT ImageToHeightFieldConverter { public: ImageToHeightFieldConverter(); /** dtor */ virtual ~ImageToHeightFieldConverter() { } /** * Instruct the converter to detect and replace "no data" values. It will * try to interpolate the proper value, or fall back on the provided value * if the interpolation fails. */ void setRemoveNoDataValues( bool value, float fallback =0.0f ); public: /** * Converts an image to a heightfield. */ osg::HeightField* convert(const osg::Image* image ); osg::HeightField* convert(const osg::Image* image, float scaleFactor ); /** * Converts a heightfield to an image. */ osg::Image* convert(const osg::HeightField* hf, int pixelSize = 32); osg::Image* convertToR16F(const osg::HeightField* hf) const; osg::Image* convertToR32F(const osg::HeightField* hf) const; private: osg::HeightField* convert16(const osg::Image* image ) const; osg::HeightField* convert32(const osg::Image* image ) const; osg::Image* convert16(const osg::HeightField* hf ) const; osg::Image* convert32(const osg::HeightField* hf ) const; bool _replace_nodata; float _nodata_value; }; } } #endif //OSGEARTH_IMAGE_TO_HEIGHTFIELD_CONVERTER