PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ rt_band_duplicate()

rt_band rt_band_duplicate ( rt_band  band)

Create a new band duplicated from source band.

Memory is allocated for band path (if band is offline) or band data (if band is online). The caller is responsible for freeing the memory when the returned rt_band is destroyed.

Parameters
the band to copy
Returns
an rt_band or NULL on failure

Definition at line 446 of file rt_band.c.

446 {
447 rt_band rtn = NULL;
448
449 assert(band != NULL);
450
451 /* offline */
452 if (band->offline) {
454 band->width, band->height,
455 band->pixtype,
456 band->hasnodata, band->nodataval,
457 band->data.offline.bandNum, (const char *) band->data.offline.path
458 );
459 }
460 /* online */
461 else {
462 uint8_t *data = NULL;
463 data = rtalloc((size_t)rt_pixtype_size(band->pixtype) * band->width * band->height);
464 if (data == NULL) {
465 rterror("rt_band_duplicate: Out of memory allocating online band data");
466 return NULL;
467 }
468 memcpy(data, band->data.mem, (size_t)rt_pixtype_size(band->pixtype) * band->width * band->height);
469
470 rtn = rt_band_new_inline(
471 band->width, band->height,
472 band->pixtype,
473 band->hasnodata, band->nodataval,
474 data
475 );
476 rt_band_set_ownsdata_flag(rtn, 1); /* we DO own this data!!! */
477 }
478
479 if (rtn == NULL) {
480 rterror("rt_band_duplicate: Could not copy band");
481 return NULL;
482 }
483
484 return rtn;
485}
void rterror(const char *fmt,...) __attribute__((format(printf
Wrappers used for reporting errors and info.
void * rtalloc(size_t size)
Wrappers used for managing memory.
Definition rt_context.c:191
int rt_pixtype_size(rt_pixtype pixtype)
Return size in bytes of a value in the given pixtype.
Definition rt_pixel.c:40
rt_band rt_band_new_inline(uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t *data)
Create an in-db rt_band with no data.
Definition rt_band.c:64
void rt_band_set_ownsdata_flag(rt_band band, int flag)
Definition rt_band.c:826
rt_band rt_band_new_offline(uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t bandNum, const char *path)
Create an out-db rt_band.
Definition rt_band.c:283

References rt_band_new_inline(), rt_band_new_offline(), rt_band_set_ownsdata_flag(), rt_pixtype_size(), rtalloc(), and rterror().

Referenced by rt_raster_copy_band().

Here is the call graph for this function:
Here is the caller graph for this function: