static void sample_data(texgz_tex_t* src, texgz_tex_t* dst, int x, int y, int i, int j, int m, int n, double latT, double lonL, double latB, double lonR) { assert(src); assert(dst); LOGD("debug x=%i, y=%i, i=%i, j=%i, m=%i, n=%i, latT=%lf, lonL=%lf, latB=%lf, lonR=%lf", x, y, i, j, m, n, latT, lonL, latB, lonR); // make a dummy tile nedgz_tile_t* tile = nedgz_tile_new(x, y, 9); if(tile == NULL) { return; } // compute sample coords double lat; double lon; tile_coord(tile, i, j, m, n, &lat, &lon); // compute u, v float u = (float) ((lon - lonL)/(lonR - lonL)); float v = (float) ((lat - latT)/(latB - latT)); // interpolate color unsigned char r; unsigned char g; unsigned char b; interpolatec(src, u, v, &r, &g, &b); // store color unsigned char* pixels = dst->pixels; int stride = dst->stride; int bpp = texgz_tex_bpp(dst); int idx = m*stride*bpp + n*bpp; pixels[idx + 0] = r; pixels[idx + 1] = g; pixels[idx + 2] = b; nedgz_tile_delete(&tile); }
static void sample_data(texgz_tex_t* src, texgz_tex_t* dst, int x, int y, int m, int n, double latT, double lonL, double latB, double lonR) { assert(src); assert(dst); // compute sample coords double lat; double lon; float s = (float) (SUBTILE_SIZE - 1); float xx = (float) x; float yy = (float) y; float nn = (float) n/s; float mm = (float) m/s; terrain_tile2coord(xx + nn, yy + mm, 9, &lat, &lon); // compute u, v float u = (float) ((lon - lonL)/(lonR - lonL)); float v = (float) ((lat - latT)/(latB - latT)); // interpolate color unsigned char r; unsigned char g; unsigned char b; interpolatec(src, u, v, &r, &g, &b); // store color unsigned char* pixels = dst->pixels; int stride = dst->stride; int bpp = texgz_tex_bpp(dst); int idx = m*stride*bpp + n*bpp; pixels[idx + 0] = r; pixels[idx + 1] = g; pixels[idx + 2] = b; }