Ваш входной GeoTIFF может иметь не одну полосу с плавающей запятой, а 3 (или 4) 8-битных полосы.
Полосы в GeoTIFF в основном являются каналами изображения.В отличие от других форматов изображений, эти каналы также могут иметь значения с плавающей запятой.
Вы можете ознакомиться с документацией GDAL здесь , чтобы узнать больше о разрешенных форматах.
Так что, вероятно, (хотя я не могу быть уверен на 100%не смотря на это), что ваш файл - просто GeoTIFF RGBA и, следовательно, имеет 4 полосы UNIT8.
Следовательно, ваш вызов в RasterIO совершенно неправильный.Вы должны перебрать 4 полосы и скопировать их с помощью RasterIO в буфер памяти QImage, соблюдая порядок полос.
Что-то вроде:
int nBands = poDataset->GetRasterCount();
for(int b=0; b < nBands; b++)
{
GDALRasterBand *band = poDataset->GetRasterBand(b);
if(band != nullptr)
{
CPLErr error = band->RasterIO(GF_Write, 0, 0, image.width(), image.height(), image.bits() + b, image.width(), image.height(), GDT_Byte, nBands, 0);
if(error != CE_None)
{
// REPORT ERROR
}
}
}
Обратите внимание, что в приведенном выше коде пропущены всетребуемые проверки (убедитесь, что тип полосы байтов и т. д.), и в зависимости от вашего файла порядок диапазонов может варьироваться (BGRA, RGBA, ecc).