diff --git a/read_tiff.cpp b/read_tiff.cpp index 575d790..9869544 100644 --- a/read_tiff.cpp +++ b/read_tiff.cpp @@ -10,7 +10,7 @@ #include #include #include -/* + class HeightMap { public: @@ -18,18 +18,59 @@ class HeightMap int x_size; int y_size; - HeightMap(int x_size, int y_size); + HeightMap(const char* filepath); + float get_pixel(int x,int y); }; -HeightMap::HeightMap(int x_size, int y_size, char* filepath) { - this->x_size = x_size; - this->y_size = y_size; +HeightMap::HeightMap(const char* filepath) +{ + // Open the file with some gdal nonsense: + const GDALAccess eAccess = GA_ReadOnly; + GDALDatasetUniquePtr file; + GDALAllRegister(); + file = GDALDatasetUniquePtr(GDALDataset::FromHandle(GDALOpen( filepath, eAccess ))); + if( !file ) + { + std::cout << "Could not open tiff file!"; // handle error + } + + // The heigthmap only has one band + auto band = file->GetBands()[0]; + // write the attrributes + this->x_size = band->GetXSize(); + this->y_size = band->GetYSize(); + this->data = (float *) CPLMalloc(sizeof(GDT_Float32)*x_size*y_size); - - + band->RasterIO( GF_Read, 0, 0, x_size, y_size, + this->data, x_size, y_size, GDT_Float32, + 0, 0 ); } -*/ +float HeightMap::get_pixel(int x, int y) +{ + // all the pixels are in an array of floats from left to right, top to bottom + int offset = (this->x_size * y + x) * sizeof(GDT_Float32); + return *(this->data + offset); +} + int main(int argc, const char* argv[]) +{ + const char* filepath = argv[1]; + HeightMap map(filepath); + std::cout << map.get_pixel(0, 0); + /* + for (int i = 0; i < map.x_size*map.y_size; i++) + + { + map.data+=sizeof(GDT_Float32); + if (*map.data) + { + std::cout << *map.data<<" "<GetProjectionRef() != NULL ) printf( "Projection is `%s'\n", poDataset->GetProjectionRef() ); if( poDataset->GetGeoTransform( adfGeoTransform ) == CE_None ) - { + {poDataset printf( "Origin = (%.6f,%.6f)\n", adfGeoTransform[0], adfGeoTransform[3] ); printf( "Pixel Size = (%.6f,%.6f)\n", @@ -86,3 +127,4 @@ int main(int argc, const char* argv[]) } std::cout << "🤡"<<*buffer; } +*/ \ No newline at end of file