netzel commited on 2024-03-25 09:42:06
Showing 2 changed files, with 38 additions and 0 deletions.
... | ... |
@@ -375,6 +375,36 @@ EZGDAL_LAYER* ezgdal_create_layer(char *fname, |
375 | 375 |
return o; |
376 | 376 |
} |
377 | 377 |
|
378 |
+void ezgdal_read_buffer_with_shift(EZGDAL_LAYER *layer, int row) { |
|
379 |
+ int i; |
|
380 |
+ double d = 0.0; |
|
381 |
+ double *p; |
|
382 |
+ row += layer->shift_rows; |
|
383 |
+ if(row<0 || row>=layer->rows) { |
|
384 |
+ if(layer->is_no_data) d = layer->no_data; |
|
385 |
+ p = layer->buffer; |
|
386 |
+ for(i=0; i<layer->cols; i++) |
|
387 |
+ *(p++) = d; |
|
388 |
+ } else if(layer->shift_cols==0) |
|
389 |
+ i=GDALRasterIO(layer->band_h, GF_Read, 0, row, layer->cols, 1, |
|
390 |
+ layer->buffer, layer->cols, 1, GDT_Float64, 0, 0); |
|
391 |
+ else if(layer->shift_cols>0) { |
|
392 |
+ i=GDALRasterIO(layer->band_h, GF_Read, layer->shift_cols, row, layer->cols, 1, |
|
393 |
+ layer->buffer, layer->cols - layer->shift_cols, 1, GDT_Float64, 0, 0); |
|
394 |
+ if(layer->is_no_data) d = layer->no_data; |
|
395 |
+ p = layer->buffer; |
|
396 |
+ for(i=0; i<layer->shift_cols; i++) |
|
397 |
+ *(p++) = d; |
|
398 |
+ } else { |
|
399 |
+ i=GDALRasterIO(layer->band_h, GF_Read, 0, row, layer->cols+layer->shift_cols, 1, |
|
400 |
+ layer->buffer, layer->cols + layer->shift_cols, 1, GDT_Float64, 0, 0); |
|
401 |
+ if(layer->is_no_data) d = layer->no_data; |
|
402 |
+ p = layer->buffer - (layer->cols + layer->shift_cols); |
|
403 |
+ for(i=0; i<layer->shift_cols; i++) |
|
404 |
+ *(p++) = d; |
|
405 |
+ } |
|
406 |
+} |
|
407 |
+ |
|
378 | 408 |
void ezgdal_read_buffer(EZGDAL_LAYER *layer, int row) { |
379 | 409 |
int i; |
380 | 410 |
double d = 0.0; |
... | ... |
@@ -428,6 +458,10 @@ void ezgdal_set_null(EZGDAL_LAYER *layer, double *v) { |
428 | 458 |
*v = layer->no_data; |
429 | 459 |
} |
430 | 460 |
|
461 |
+void ezgdal_shift_layer(EZGDAL_LAYER *layer, int shift_rows, int shift_cols) { |
|
462 |
+ layer->shift_rows = shift_rows; |
|
463 |
+ layer->shift_cols = shift_cols; |
|
464 |
+} |
|
431 | 465 |
|
432 | 466 |
|
433 | 467 |
/*==========================================*/ |
... | ... |
@@ -89,6 +89,8 @@ struct EZGDAL_LAYER { |
89 | 89 |
GDALRasterBandH band_h; |
90 | 90 |
int rows; |
91 | 91 |
int cols; |
92 |
+ int shift_rows; |
|
93 |
+ int shift_cols; |
|
92 | 94 |
int is_no_data; |
93 | 95 |
double no_data; |
94 | 96 |
double *buffer; |
... | ... |
@@ -134,9 +136,11 @@ EZGDAL_DLL_API EZGDAL_LAYER* ezgdal_open_layer_band(char *fname, int band); |
134 | 136 |
EZGDAL_DLL_API EZGDAL_LAYER* ezgdal_open_layer_rw(char *fname); |
135 | 137 |
EZGDAL_DLL_API void ezgdal_close_layer(EZGDAL_LAYER *layer); |
136 | 138 |
|
139 |
+EZGDAL_DLL_API void ezgdal_shift_layer(EZGDAL_LAYER *layer, int shift_rows, int shift_cols); |
|
137 | 140 |
EZGDAL_DLL_API void ezgdal_set_palette255(EZGDAL_LAYER *layer, double palette[][5], int n); |
138 | 141 |
|
139 | 142 |
EZGDAL_DLL_API void ezgdal_read_buffer(EZGDAL_LAYER *layer, int row); |
143 |
+EZGDAL_DLL_API void ezgdal_read_buffer_with_shift(EZGDAL_LAYER *layer, int row); |
|
140 | 144 |
EZGDAL_DLL_API void ezgdal_write_buffer(EZGDAL_LAYER *layer, int row); |
141 | 145 |
|
142 | 146 |
EZGDAL_DLL_API void ezgdal_read_all_layer(EZGDAL_LAYER *layer, double* buffer); |
143 | 147 |