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

◆ 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

References 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: