.. _program_listing_file__tmp_ws_src_grid_map_grid_map_sdf_include_grid_map_sdf_distance_transform_image.hpp: Program Listing for File image.hpp ================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/grid_map/grid_map_sdf/include/grid_map_sdf/distance_transform/image.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /* Copyright (C) 2006 Pedro Felzenszwalb This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* a simple image class */ #ifndef GRID_MAP_SDF__DISTANCE_TRANSFORM__IMAGE_HPP_ #define GRID_MAP_SDF__DISTANCE_TRANSFORM__IMAGE_HPP_ #include namespace distance_transform { template class image // NOLINT { public: /* create an image */ image(const int width, const int height, const bool init = true); /* delete an image */ ~image(); /* init an image */ void init(const T & val); /* copy an image */ image * copy() const; /* get the width of an image. */ int width() const {return w;} /* get the height of an image. */ int height() const {return h;} /* image data. */ T * data; /* row pointers. */ T ** access; private: int w, h; }; /* use imRef to access image data. */ #define imRef(im, x, y) (im->access[y][x]) /* use imPtr to get pointer to image data. */ #define imPtr(im, x, y) & (im->access[y][x]) template image::image(const int width, const int height, const bool init) { w = width; h = height; data = new T[w * h]; // allocate space for image data access = new T *[h]; // allocate space for row pointers // initialize row pointers for (int i = 0; i < h; i++) { access[i] = data + (i * w); } if (init) { memset(data, 0, w * h * sizeof(T)); } } template image::~image() { delete[] data; delete[] access; } template void image::init(const T & val) { T * ptr = imPtr(this, 0, 0); T * end = imPtr(this, w - 1, h - 1); while (ptr <= end) { *ptr++ = val; } } template image * image::copy() const { image * im = new image(w, h, false); memcpy(im->data, data, w * h * sizeof(T)); return im; } } // namespace distance_transform #endif // GRID_MAP_SDF__DISTANCE_TRANSFORM__IMAGE_HPP_