#include #include "gdal/gdal_priv.h" #include #include #include "HeightMap.hh" 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->width = band->GetXSize(); this->height = band->GetYSize(); this->min = band->GetMinimum(); this->max = band-> GetMaximum(); this->data = (float *) CPLMalloc(sizeof(float)*width*height); band->RasterIO( GF_Read, 0, 0, width, height, this->data, width, height, GDT_Float32, 0, 0 ); band->FlushCache(); } 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->width * y) + x); return *(this->data + offset); }