bugs fixed
netzel

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