PostGIS 3.0.6dev-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 duplicate
Returns
an rt_band or NULL on failure

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 287 of file rt_band.c.

287 {
288 rt_band rtn = NULL;
289
290 assert(band != NULL);
291
292 /* offline */
293 if (band->offline) {
295 band->width, band->height,
296 band->pixtype,
297 band->hasnodata, band->nodataval,
298 band->data.offline.bandNum, (const char *) band->data.offline.path
299 );
300 }
301 /* online */
302 else {
303 uint8_t *data = NULL;
304 data = rtalloc(rt_pixtype_size(band->pixtype) * band->width * band->height);
305 if (data == NULL) {
306 rterror("rt_band_duplicate: Out of memory allocating online band data");
307 return NULL;
308 }
309 memcpy(data, band->data.mem, rt_pixtype_size(band->pixtype) * band->width * band->height);
310
311 rtn = rt_band_new_inline(
312 band->width, band->height,
313 band->pixtype,
314 band->hasnodata, band->nodataval,
315 data
316 );
317 rt_band_set_ownsdata_flag(rtn, 1); /* we DO own this data!!! */
318 }
319
320 if (rtn == NULL) {
321 rterror("rt_band_duplicate: Could not copy band");
322 return NULL;
323 }
324
325 return rtn;
326}
void rterror(const char *fmt,...)
Wrappers used for reporting errors and info.
Definition rt_context.c:199
void * rtalloc(size_t size)
Wrappers used for managing memory.
Definition rt_context.c:171
int rt_pixtype_size(rt_pixtype pixtype)
Return size in bytes of a value in the given pixtype.
Definition rt_pixel.c:39
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:63
void rt_band_set_ownsdata_flag(rt_band band, int flag)
Definition rt_band.c:667
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:124

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: