PostGIS  3.7.0dev-r@@SVN_REVISION@@

◆ rt_band_init_value()

void rt_band_init_value ( rt_band  band,
double  initval 
)

Fill in the cells of a band with a starting value frequently used to init with nodata value.

Parameters
band: band to initialize
initval: value to initialize with

Definition at line 112 of file rt_band.c.

115  {
116  assert(band != NULL);
117  assert(band->data.mem != NULL);
118  rt_pixtype pixtype = band->pixtype;
119  uint32_t width = band->width;
120  uint32_t height = band->height;
121  uint32_t numval = width * height;
122  void *mem = band->data.mem;
123  size_t memsize = numval * rt_pixtype_size(pixtype);
124 
125  /* initialize to nodataval */
126  int32_t checkvalint = 0;
127  uint32_t checkvaluint = 0;
128  double checkvaldouble = 0;
129  float checkvalfloat = 0;
130 
131  /* initialize to zero */
132  if (FLT_EQ(initval, 0.0)) {
133  memset(mem, 0, memsize);
134  return;
135  }
136 
137  switch (pixtype) {
138  case PT_1BB:
139  {
140  uint8_t *ptr = mem;
141  uint8_t clamped_initval = rt_util_clamp_to_1BB(initval);
142  for (uint32_t i = 0; i < numval; i++)
143  ptr[i] = clamped_initval;
144  checkvalint = ptr[0];
145  break;
146  }
147  case PT_2BUI:
148  {
149  uint8_t *ptr = mem;
150  uint8_t clamped_initval = rt_util_clamp_to_2BUI(initval);
151  for (uint32_t i = 0; i < numval; i++)
152  ptr[i] = clamped_initval;
153  checkvalint = ptr[0];
154  break;
155  }
156  case PT_4BUI:
157  {
158  uint8_t *ptr = mem;
159  uint8_t clamped_initval = rt_util_clamp_to_4BUI(initval);
160  for (uint32_t i = 0; i < numval; i++)
161  ptr[i] = clamped_initval;
162  checkvalint = ptr[0];
163  break;
164  }
165  case PT_8BSI:
166  {
167  int8_t *ptr = mem;
168  int8_t clamped_initval = rt_util_clamp_to_8BSI(initval);
169  for (uint32_t i = 0; i < numval; i++)
170  ptr[i] = clamped_initval;
171  checkvalint = ptr[0];
172  break;
173  }
174  case PT_8BUI:
175  {
176  uint8_t *ptr = mem;
177  uint8_t clamped_initval = rt_util_clamp_to_8BUI(initval);
178  for (uint32_t i = 0; i < numval; i++)
179  ptr[i] = clamped_initval;
180  checkvalint = ptr[0];
181  break;
182  }
183  case PT_16BSI:
184  {
185  int16_t *ptr = mem;
186  int16_t clamped_initval = rt_util_clamp_to_16BSI(initval);
187  for (uint32_t i = 0; i < numval; i++)
188  ptr[i] = clamped_initval;
189  checkvalint = ptr[0];
190  break;
191  }
192  case PT_16BUI:
193  {
194  uint16_t *ptr = mem;
195  uint16_t clamped_initval = rt_util_clamp_to_16BUI(initval);
196  for (uint32_t i = 0; i < numval; i++)
197  ptr[i] = clamped_initval;
198  checkvalint = ptr[0];
199  break;
200  }
201  case PT_32BSI:
202  {
203  int32_t *ptr = mem;
204  int32_t clamped_initval = rt_util_clamp_to_32BSI(initval);
205  for (uint32_t i = 0; i < numval; i++)
206  ptr[i] = clamped_initval;
207  checkvalint = ptr[0];
208  break;
209  }
210  case PT_32BUI:
211  {
212  uint32_t *ptr = mem;
213  uint32_t clamped_initval = rt_util_clamp_to_32BUI(initval);
214  for (uint32_t i = 0; i < numval; i++)
215  ptr[i] = clamped_initval;
216  checkvaluint = ptr[0];
217  break;
218  }
219  case PT_32BF:
220  {
221  float *ptr = mem;
222  float clamped_initval = rt_util_clamp_to_32F(initval);
223  for (uint32_t i = 0; i < numval; i++)
224  ptr[i] = clamped_initval;
225  checkvalfloat = ptr[0];
226  break;
227  }
228  case PT_64BF:
229  {
230  double *ptr = mem;
231  for (uint32_t i = 0; i < numval; i++)
232  ptr[i] = initval;
233  checkvaldouble = ptr[0];
234  break;
235  }
236  default:
237  {
238  rterror("%s: Unknown pixeltype %d", __func__, pixtype);
239  return;
240  }
241  }
242 
243  /* Overflow checking */
245  initval,
246  checkvalint, checkvaluint,
247  checkvalfloat, checkvaldouble,
248  pixtype
249  );
250 
251  return;
252 }
void rterror(const char *fmt,...) __attribute__((format(printf
Wrappers used for reporting errors and info.
int8_t rt_util_clamp_to_8BSI(double value)
Definition: rt_util.c:50
uint8_t rt_util_clamp_to_1BB(double value)
Definition: rt_util.c:35
int32_t rt_util_clamp_to_32BSI(double value)
Definition: rt_util.c:70
rt_pixtype
Definition: librtcore.h:187
@ PT_32BUI
Definition: librtcore.h:196
@ PT_2BUI
Definition: librtcore.h:189
@ PT_32BSI
Definition: librtcore.h:195
@ PT_4BUI
Definition: librtcore.h:190
@ PT_32BF
Definition: librtcore.h:197
@ PT_1BB
Definition: librtcore.h:188
@ PT_16BUI
Definition: librtcore.h:194
@ PT_8BSI
Definition: librtcore.h:191
@ PT_16BSI
Definition: librtcore.h:193
@ PT_64BF
Definition: librtcore.h:198
@ PT_8BUI
Definition: librtcore.h:192
int rt_util_dbl_trunc_warning(double initialvalue, int32_t checkvalint, uint32_t checkvaluint, float checkvalfloat, double checkvaldouble, rt_pixtype pixtype)
Definition: rt_util.c:681
#define FLT_EQ(x, y)
Definition: librtcore.h:2424
uint8_t rt_util_clamp_to_2BUI(double value)
Definition: rt_util.c:40
uint8_t rt_util_clamp_to_8BUI(double value)
Definition: rt_util.c:55
int16_t rt_util_clamp_to_16BSI(double value)
Definition: rt_util.c:60
uint8_t rt_util_clamp_to_4BUI(double value)
Definition: rt_util.c:45
uint16_t rt_util_clamp_to_16BUI(double value)
Definition: rt_util.c:65
uint32_t rt_util_clamp_to_32BUI(double value)
Definition: rt_util.c:75
float rt_util_clamp_to_32F(double value)
Definition: rt_util.c:80
int rt_pixtype_size(rt_pixtype pixtype)
Return size in bytes of a value in the given pixtype.
Definition: rt_pixel.c:39
band
Definition: ovdump.py:58

References ovdump::band, FLT_EQ, PT_16BSI, PT_16BUI, PT_1BB, PT_2BUI, PT_32BF, PT_32BSI, PT_32BUI, PT_4BUI, PT_64BF, PT_8BSI, PT_8BUI, rt_pixtype_size(), rt_util_clamp_to_16BSI(), rt_util_clamp_to_16BUI(), rt_util_clamp_to_1BB(), rt_util_clamp_to_2BUI(), rt_util_clamp_to_32BSI(), rt_util_clamp_to_32BUI(), rt_util_clamp_to_32F(), rt_util_clamp_to_4BUI(), rt_util_clamp_to_8BSI(), rt_util_clamp_to_8BUI(), rt_util_dbl_trunc_warning(), and rterror().

Referenced by rt_band_reclass(), rt_band_reclass_exact(), and rt_raster_generate_new_band().

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