PostGIS  2.5.1dev-r@@SVN_REVISION@@

◆ rt_raster_copy_band()

int rt_raster_copy_band ( rt_raster  torast,
rt_raster  fromrast,
int  fromindex,
int  toindex 
)

Copy one band from one raster to another.

Bands are duplicated from fromrast to torast using rt_band_duplicate. The caller will need to ensure that the copied band's data or path remains allocated for the lifetime of the copied bands.

Parameters
torast: raster to copy band to
fromrast: raster to copy band from
fromindex: index of band in source raster, 0-based
toindex: index of new band in destination raster, 0-based
Returns
The band index of the second raster where the new band is copied. -1 if error

Definition at line 1370 of file rt_raster.c.

References rt_raster_t::height, rt_raster_t::numBands, rt_band_duplicate(), rt_raster_add_band(), rt_raster_get_band(), rtwarn(), and rt_raster_t::width.

Referenced by RASTER_addBandRasterArray(), RASTER_copyBand(), RASTER_mapAlgebraExpr(), RASTER_union_finalfn(), and rt_raster_from_band().

1373  {
1374  rt_band srcband = NULL;
1375  rt_band dstband = NULL;
1376 
1377  assert(NULL != torast);
1378  assert(NULL != fromrast);
1379 
1380  /* Check raster dimensions */
1381  if (torast->height != fromrast->height || torast->width != fromrast->width) {
1382  rtwarn("rt_raster_copy_band: Attempting to add a band with different width or height");
1383  return -1;
1384  }
1385 
1386  /* Check bands limits */
1387  if (fromrast->numBands < 1) {
1388  rtwarn("rt_raster_copy_band: Second raster has no band");
1389  return -1;
1390  }
1391  else if (fromindex < 0) {
1392  rtwarn("rt_raster_copy_band: Band index for second raster < 0. Defaulted to 0");
1393  fromindex = 0;
1394  }
1395  else if (fromindex >= fromrast->numBands) {
1396  rtwarn("rt_raster_copy_band: Band index for second raster > number of bands, truncated from %u to %u", fromindex, fromrast->numBands - 1);
1397  fromindex = fromrast->numBands - 1;
1398  }
1399 
1400  if (toindex < 0) {
1401  rtwarn("rt_raster_copy_band: Band index for first raster < 0. Defaulted to 0");
1402  toindex = 0;
1403  }
1404  else if (toindex > torast->numBands) {
1405  rtwarn("rt_raster_copy_band: Band index for first raster > number of bands, truncated from %u to %u", toindex, torast->numBands);
1406  toindex = torast->numBands;
1407  }
1408 
1409  /* Get band from source raster */
1410  srcband = rt_raster_get_band(fromrast, fromindex);
1411 
1412  /* duplicate band */
1413  dstband = rt_band_duplicate(srcband);
1414 
1415  /* Add band to the second raster */
1416  return rt_raster_add_band(torast, dstband, toindex);
1417 }
int rt_raster_add_band(rt_raster raster, rt_band band, int index)
Add band data to a raster.
Definition: rt_raster.c:405
uint16_t numBands
Definition: librtcore.h:2290
uint16_t height
Definition: librtcore.h:2302
void rtwarn(const char *fmt,...)
Definition: rt_context.c:224
uint16_t width
Definition: librtcore.h:2301
rt_band rt_band_duplicate(rt_band band)
Create a new band duplicated from source band.
Definition: rt_band.c:287
rt_band rt_raster_get_band(rt_raster raster, int n)
Return Nth band, or NULL if unavailable.
Definition: rt_raster.c:381
Here is the call graph for this function:
Here is the caller graph for this function: