// ColorVal_intern& operator()(int p, int z, int rz, int cz) { // int r = rz*zoom_rowpixelsize(z); // int c = cz*zoom_colpixelsize(z); // return planes[p](r,c); // } void set(int p, int z, uint32_t rz, uint32_t cz, ColorVal x) { // return operator()(p,rz*zoom_rowpixelsize(z),cz*zoom_colpixelsize(z)); uint32_t r = rz*zoom_rowpixelsize(z); uint32_t c = cz*zoom_colpixelsize(z); // if (p==0 && r>= 0 && c>=0 && r<width &&c<height) fprintf(stdout,"Writing to pixel at zoomlevel %i, position %i,%i, actual position %i,%i\n",z,rz,cz,rz*zoom_rowpixelsize(z),cz*zoom_colpixelsize(z)); set(p,r,c,x); }
ColorVal operator()(int p, int z, uint32_t rz, uint32_t cz) const { // if (p==0) fprintf(stdout,"Reading pixel at zoomlevel %i, position %i,%i, actual position %i,%i\n",z,rz,cz,rz*zoom_rowpixelsize(z),cz*zoom_colpixelsize(z)); // return operator()(p,rz*zoom_rowpixelsize(z),cz*zoom_colpixelsize(z)); uint32_t r = rz*zoom_rowpixelsize(z); uint32_t c = cz*zoom_colpixelsize(z); // if (p==0 && r>= 0 && c>=0 && r<width &&c<height) fprintf(stdout,"Reading pixel at zoomlevel %i, position %i,%i, actual position %i,%i\n",z,rz,cz,rz*zoom_rowpixelsize(z),cz*zoom_colpixelsize(z)); return operator()(p,r,c); }
int zooms() const { int z = 0; while (zoom_rowpixelsize(z) < rows() || zoom_colpixelsize(z) < cols()) z++; return z; }
uint32_t cols(int zoomlevel) const { return 1+(cols()-1)/zoom_colpixelsize(zoomlevel); }
ColorVal get(const int z, const uint32_t r, const uint32_t c) const { return get(r*zoom_rowpixelsize(z),c*zoom_colpixelsize(z)); }
void set(const int z, const uint32_t r, const uint32_t c, const ColorVal x) { set(r*zoom_rowpixelsize(z),c*zoom_colpixelsize(z),x); }