/*! \file lib/imagery/iclass_bands.c \brief Imagery library - functions for wx.iclass Computation based on training areas for supervised classification. Based on i.class module (GRASS 6). Reading bands cell category values. Copyright (C) 1999-2007, 2011 by the GRASS Development Team This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details. \author David Satnik, Central Washington University (original author) \author Markus Neteler (i.class module) \author Bernhard Reiter (i.class module) \author Brad Douglas (i.class module) \author Glynn Clements (i.class module) \author Hamish Bowman (i.class module) \author Jan-Oliver Wagner (i.class module) \author Anna Kratochvilova (rewriting for wx.iclass) \author Vaclav Petras (rewriting for wx.iclass) */ #include #include #include "iclass_local_proto.h" /*! \brief Open and allocate space for the group band files. \param refer pointer to band files structure \param[out] band_buffer buffer to read one row of each band \param[out] band_fd band files descriptors */ void open_band_files(struct Ref *refer, CELL *** band_buffer, int **band_fd) { int n, nbands; char *name, *mapset; G_debug(3, "open_band_files()"); /* allocate row buffers and open raster maps */ nbands = refer->nfiles; *band_buffer = (CELL **) G_malloc(nbands * sizeof(CELL *)); *band_fd = (int *)G_malloc(nbands * sizeof(int)); for (n = 0; n < nbands; n++) { (*band_buffer)[n] = Rast_allocate_c_buf(); name = refer->file[n].name; mapset = refer->file[n].mapset; (*band_fd)[n] = Rast_open_old(name, mapset); } } /*! \brief Close and free space for the group band files. \param refer pointer to band files structure \param band_buffer buffer to read one row of each band \param band_fd band files descriptors */ void close_band_files(struct Ref *refer, CELL ** band_buffer, int *band_fd) { int n, nbands; G_debug(3, "close_band_files()"); nbands = refer->nfiles; for (n = 0; n < nbands; n++) { G_free(band_buffer[n]); Rast_close(band_fd[n]); } G_free(band_buffer); G_free(band_fd); } /*! \brief Read one row of each band. \param band_buffer buffer to read one row of each band \param band_fd band files descriptors \param nbands number of band files \param row data row */ void read_band_row(CELL ** band_buffer, int *band_fd, int nbands, int row) { int i; G_debug(5, "read_band_row(): row = %d", row); for (i = 0; i < nbands; i++) Rast_get_c_row_nomask(band_fd[i], band_buffer[i], row); }